我的大部分测试中都有以下代码:
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,这会签署用户,并在以后的其他测试中使用它(我检查公司的属性)用户)
答案 0 :(得分:24)
我遇到了同样的问题,我通过将所有变量声明为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
,并且不应该有任何警告。
答案 1 :(得分:2)
我不确定“这个”在“这样做的正确方法是什么”中的含义是什么意思?不推荐在let
内访问subject
和before(:all)
,并且会在{3}}中使用以下说明在RSpec 3中删除:
let
和subject
声明无意在a中调用before(:all)
挂钩,因为它们存在以定义重置的状态 在每个示例之间,before(:all)
存在以定义状态 在示例组中的示例中共享。
答案 2 :(得分:1)
考虑到Peter的回答,我认为正确的方法是在每个块之前访问用户:
before(:each) do
sign_in user
end