我正在尝试用rspec做一些事情,但我无法在我需要的地方访问我需要的变量。例如:
describe "some things" do
it "should have things in App" do
App.things.should_not be_nil #no problems here
# puts App.things.count
# => 10
end
# puts App.things.count
# => 0
App.things.each do |thing|
#this doesn't work at all as App.things is empty
it "#{thing.title} should have an account number" do
thing.acc_no.should_not be_nil
end
end
我想这是因为调用不同块的时间。或许我完全忽略了这一点。
我需要迭代'事物'并对每个事物进行断言,但我不能这样做,因为事物在describe块的上下文中没有任何元素,只在it块内。
任何帮助?
答案 0 :(得分:0)
看起来你做错了:为什么要测试一个集合的每一个值?
创建一些灯具并测试App是否具有正确数量的已创建对象
使用其中一个创建的灯具来测试具有正确值,运行验证等等...
至少,您可以使用rspec的共享示例重复常见测试:
http://blog.davidchelimsky.net/2010/11/07/specifying-mixins-with-shared-example-groups-in-rspec-2/
答案 1 :(得分:0)
我不知道这是否有帮助,但我遇到了类似的问题。我想迭代“它”块的原因是rspec失败消息将包含我迭代的东西的名称。
在我的情况下,它是一系列dom id,可能包含div,也可能不包含div,具体取决于页面上不同对象的状态。
所以我做了:
%w{preliminary_project_proposal final_project_proposal progress_report preliminary_abstract final_abstract preliminary_presentation final_presentation}.each do |id|
it "should not show a late message for #{id}" do
within "##{id}" do
page.should_not have_css('.late_assignment')
end
end
end
这很好用。正如您所指出的,我无法将数组赋值移动到变量或方法,这意味着它出现在几个地方,这不是很漂亮。