消息顺序
您可以使用 ordered
来约束多个消息期望的顺序。一般不推荐这样做,因为在大多数情况下,顺序并不重要,使用 ordered
会使您的规范变得脆弱,但它偶尔很有用。当您使用 ordered
时,示例只有在消息按声明顺序接收时才会通过。
通过示例
给定一个名为“passingexamplespec.rb”的文件,其中包含
RSpec.describe "Constraining order" do
it "passes when the messages are received in declared order" do
collaborator_1 = double("Collaborator 1")
collaborator_2 = double("Collaborator 2")
expect(collaborator_1).to receive(:step_1).ordered
expect(collaborator_2).to receive(:step_2).ordered
expect(collaborator_1).to receive(:step_3).ordered
collaborator_1.step_1
collaborator_2.step_2
collaborator_1.step_3
end
end
当我运行 rspec passing_example_spec.rb
然后示例应该全部通过。
失败示例
给定一个名为“failingexamplesspec.rb”的文件,其中包含
RSpec.describe "Constraining order" do
it "fails when messages are received out of order on one collaborator" do
collaborator_1 = double("Collaborator 1")
expect(collaborator_1).to receive(:step_1).ordered
expect(collaborator_1).to receive(:step_2).ordered
collaborator_1.step_2
collaborator_1.step_1
end
it "fails when messages are received out of order between collaborators" do
collaborator_1 = double("Collaborator 1")
collaborator_2 = double("Collaborator 2")
expect(collaborator_1).to receive(:step_1).ordered
expect(collaborator_2).to receive(:step_2).ordered
collaborator_2.step_2
collaborator_1.step_1
end
end
当我运行 rspec failing_examples_spec.rb --order defined
然后示例应该全部失败,并产生以下输出
1) 当消息在同一个协作者上按错误顺序接收时,约束顺序失败 |
失败/错误: collaborator1.step2 |
# |
2) 当消息在协作者之间按错误顺序接收时,约束顺序失败 |
失败/错误: collaborator2.step2 |
# |