我想在测试输出中包含一些动态数据。
如果我写这样的测试,那么它会打印出“它应该有''的东西”
我认为我对rspec的魔法和红宝石的封锁感到困惑。
我可以坚持计数在一个方法之外的方法,但这似乎是hack-ish。
任何指针?
describe 'things' do
before :all do
@count = 3
end
it "should have #{@count} things" do
#....
page.should have_content("entries: #{@count}")
end
end
如果我像上面那样写一个测试,那么就打印出“它应该有''的东西”
编辑: 另一个更具体的例子
describe 'things' do
before :all do
@thing = FactoryGirl.create(:thing)
end
it "should display a thing with name #{@thing.name} " do
#....
page.should have_css("h1", text: @thing.name)
end
end
答案 0 :(得分:1)
实例变量在 it 方法中不起作用,但常量可以。我喜欢根据 describe 块命名它。
describe 'things' do
THINGS_COUNT = 3
it "should have #{THINGS_COUNT} things" do
#....
page.should have_content("entries: #{THINGS_COUNT}")
end
end
修改:使用常量可确保您无法更改值。
编辑2 :动态变量应该更通用,绝不应该使用活动记录对象。
我使用的常见模式动态变量用于具有不同输入/输出的类似测试。
[
[1, true],
[2, false],
[3, true]
].each do |number, result|
it "should return #{result} for #{number}" do
number.odd?.should == result
end
end
在这种情况下,您可以干预您的测试,并且更容易测试不同的变化。
最好将let(:person) { Factory.create(:person) }
或before(:each)
用于特定的有效记录对象。
答案 1 :(得分:-1)
it "should have #{@count} things" do
在定义实例变量之前进行评估,因此它将是nil
。
但是,您可以在before
块之外定义变量,它将起作用。
describe 'things' do
count = 3
it "should have #{count} things" do
#....
page.should have_content("entries: #{count}")
end
end
修改 您可以访问块中的顶级变量。