在RSpec中,在之前使用let变量:all block

Fab*_*lva 25 ruby rspec ruby-on-rails rspec3

我在大多数测试中都有以下代码:

describe 'index'
 let(:company) { FactoryGirl.create(:company) }
 let(:user) { FactoryGirl.create(:user, company: company) }

 before do
   sign_in user
   visit products_path
 end
...
end
Run Code Online (Sandbox Code Playgroud)

但我收到以下警告:

WARNING: let declaration 'user' accessed in a 'before(:all)'
Run Code Online (Sandbox Code Playgroud)

我的问题是,这样做的正确方法是什么?我找不到有关警告本身的更多信息.

谢谢!

编辑:我的目标是使用用户变量,以便我可以将其传递给sign_in,签名用户,然后在另一个测试中使用它(我检查用户的公司属性)

Rom*_*lus 25

我有同样的问题,我通过将所有变量声明为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内部,你不应该有任何警告.

  • 结束了这一点.出于某种原因,我并不喜欢它的风格,但它暂时解决了这个问题.谢谢! (2认同)