ほとんどのテスト内に次のコードがあります。
describe 'index'
let(:company) { FactoryGirl.create(:company) }
let(:user) { FactoryGirl.create(:user, company: company) }
before do
sign_in user
visit products_path
end
...
end
しかし、次の警告が表示されます。
WARNING: let declaration 'user' accessed in a 'before(:all)'
私の質問は、これを行う正しい方法は何ですか?警告自体について多くの情報を見つけることができません。
ありがとう!
編集:ユーザー変数を使用してsign_inに渡すことでユーザーをサインインし、後で別のテストで使用できるようにします(ユーザーの会社属性を確認します)。
私は同じ問題を抱えていましたが、すべての変数をbefore
ブロック内の属性として宣言することで解決しました:
describe 'index' before(:all)do @company = FactoryGirl.create(:company) @user = FactoryGirl。 create(:user、company:@company) sign_in @user visit products_path end ... end
これで、テスト内で@user
と@company
を使用できるようになり、警告は表示されなくなります。
「これを行う正しい方法は何ですか」の「これ」の意味がわかりませんか? before(:all)
内のlet
およびsubject
へのアクセスは非推奨であり、RSpec 3では削除されます https://github.com/rspec/ rspec-core/pull/857 :
let
およびsubject
宣言は、before(:all)
フックで呼び出されることを意図していません。これらの宣言は、各例間でリセットされる状態を定義するために存在し、before(:all)
サンプルグループのサンプル間で共有される状態を定義するために存在します。
ピーターの答えを考慮すると、正しい方法は各ブロックの前にユーザーにアクセスすることだと思います:
before(:each) do
sign_in user
end