2015-02-10 52 views
0

我是Rspec的新手,非常抱歉,如果这是一个糟糕的问题。在我运行的其中一个测试测试中,我使用随机数生成器来确定是否应该执行一个方法。如果无法执行,该方法会产生错误消息。Rspec测试 - 继续执行方法,直到不再提高错误消息

因此,我需要编写一个测试,它不断地在小对象类对象上运行该方法,直到它不再收到错误消息。所以实际上每个类对象最终都会在几次尝试后成功执行该方法。

该数组有6个项目。我希望我需要遍历每一个,然后使用while循环,然后测试是否已执行错误消息,但我没有得到一个线索如何。任何帮助感激地赞赏。

我目前所面对的是这样的......

def create_planes 
    6.times do 
     plane=Plane.new 
     planes<<plane 
    end 
    end 

    it 'should land each plane' do 
    create_planes 

    i = 0 
    while i<planes.count 
     begin 
     airport.plane_land(planes[i]) 
     i++ 
     rescue 
     next 
     end 
    end 

    expect(airport.plane_count).to eq(6) 
    end 

回答

1

通常使用RSpec,你会设置你的输入和测试输出。在发生错误之前,你不会执行,你会执行已知数量的土地,然后检查机场的飞机是否变成了你期望的。

it "should maintain a list of landed planes" do 
    expect { 
    3.times { airport.plane_land Plane.new } 
    }.to change { airport.plane_count }.from(0).to(3) 
end 
+0

感谢Chris的评论。当你说设置你的输入时,你是先在你的代码之前创建你的测试,还是在你继续时重构每个测试。我正在与TDD过程挣扎。 – 2015-02-16 10:18:33

+0

“正确”TDD希望在编码之前设置测试。实际上,我通常最终只是在重构。当我说“设置你的输入”时,我的意思是你在RSpec中定义了“这是预期的输入”和“这是预期的输出”,然后你用设置的输入调用你的代码并检查它们是否与设置的输出匹配。 – 2015-02-16 17:35:21

+0

感谢克里斯,重构,测试和可预测输入之间的平衡,输出已经抛出我,但我慢慢到达那里。 – 2015-02-18 09:09:22