私はCucumberを使用して統合テストを行っています。私のApplicationController
中にcurrent_user
は、現在のユーザーオブジェクトを提供するというメソッドがあります。このオブジェクトを使用して、redisデータベースにアイテムを追加します。
$redis.sadd("cart#current_user.id}", [1,5,2])
私のキュウリのステップでは、この機能をテストします。
Then /^the redis database should have "(.+)" item ids/ do |count|
expect($redis.smembers("cart#{current_user.id}").count).to eq count.to_i
end
ただし、Cucumberは、コントローラーメソッドが下ApplicationController
にある場合でも、コントローラーメソッドにアクセスできないことを理解しています。そのためcurrent_user
、コントローラーで使用する方法でメソッドを使用することはできません。
現在行っているのは、機能をテストしているため、データベースにはユーザーが1人しかないため、current_user.idは常に1になりますが、ユーザーを追加し始めると、これはうまく機能しない可能性があります。
これに対する回避策はありますか?
ここで意図したようにキュウリを実際に使用していない。現在行っているのは、アプリケーションが現在どのように機能するかをテストすることですが、実際には、アプリケーションの機能とその重要性を指定するには、Cukesを使用するのが最適です。
現在の問題により適切な使用法を適用すると、次の質問につながります
IDをRedisに保存する理由は何ですか?これらのIDを保存することで、顧客はどのようなメリットを得ることができますか?
ユーザーがログアウトした場合でも、戻ってきたときにバスケットにデータが入力されるように、バスケットを保存している可能性があります。次に、シナリオは次のようになります
Scenario: Remember products in basket
Given I am registered
And I am logged in
When I put some products in my basket
And I log out
And I log in again
Then my basket should still have some products in it
シナリオがあなたがしていることとその重要性についてのすべてであることに注意してください。しかし、これがどのように行われるかについては何も明らかにしていません。これは、シナリオを批評するための本当に良い方法です。HOWのものを含むシナリオは、書くのが難しく、維持するのがはるかに難しくなります。とにかくそれで十分です:)
これで、たとえば1つのステップでユーザーを変数に割り当て@i = create_registered_user
、他のステップでそのユーザーを使用するなど、標準的なキュウリのものを使用できます。login as: @i
データベースではなく、ユーザーに表示されるものだけを調べ、この機能がシナリオでどのように機能するかについては何も明らかにしていないことに注意してください。
機能がどのように機能するかを明らかにし、データベースで結果を調べるテストを(シナリオではなく)作成したい場合は、rspecの方が適していると思います。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加