我目前正在内存中设置一个哈希,该哈希可以在我的整个套件中使用我希望做以下
RSpec.configure do |config|
config.before(:suite) { $user_tokens = initialize_my_stuff }
end
然而,当我去运行我的套件时,我从我的一个规格中得到了一个错误:NoMethodError: undefined method 'each' for nil:NilClass
它正在尝试运行这个:
$user_tokens.each do |user,token|
describe 'foo bar' do
...
end
end
如果我注释掉这个规范,那么before(:suite)
将按预期运行。
有没有办法确保before(:suite)
块在尝试对规范执行任何操作之前运行?
以下是发生的情况:
config.before(:suite) { $user_tokens = initialize_my_stuff }
它将在套件之前运行(这并不奇怪(,但是。。。
$user_tokens.each do |user,token|
describe 'foo bar' do
...
end
end
只是规范定义,发生在实际套件执行之前。
换句话说:
describe 'foo bar' do
...
end
只是保存以供以后执行的一堆块。您的$user_tokens尚未初始化。
我建议在你的规格中使用initialize_my_stuff
,如下所示:
initialize_my_stuff.each do |user,token|
describe 'foo bar' do
...
end
end
或者,如果它非常昂贵,记住它:
def user_tokens
@user_tokens ||= initialize_my_stuff
end
并使用
user_tokens.each do |user,token|
describe 'foo bar' do
...
end
end