我想在重构公司的一些旧代码之前设置一些功能规格。这是一个有点不寻常的设置,但我能够了解到关于测试替身的足够信息来绕过认证并开始工作。我仍然遇到一个问题是,我绕过的这些方法中设置的某些实例变量会被视图使用,所以我得到了“undefined method for nil:NilClass
”错误。我想在对程序代码进行任何更改之前运行规格,但在本例中,我可以轻松地将特定的实例变量移动到另一个方法中。但我相信会出现更多类似的情况。以下是我目前正在处理的示例:
def security_level
@right_now = Time.now
#
# other code that wont work without
# connecting to a remote authentication
# server
#
end
然后在我的规格中:
feature 'Navigation' do
before(:each) do
allow_any_instance_of(ApplicationController).to receive(:security_level).and_return(nil)
end
scenario 'is possible' do
visit root_path
expect(page.has_content?('Quick Stats'))
end
end
这里有一个错误,源于视图中的
@right_now.year
。 Failure/Error: visit root_path
NoMethodError:
undefined method `year' for nil:NilClass
# ./common/views/layouts/bootstrap/layout.haml:63
编辑: 是否有一种方法可以在功能规格说明中从控制器中设置实例变量?
let
关键字/方法。 - Petr Skocik