2

我们的应用程序支持多种类型的帐户,因此我们的许多测试都会遍历所有帐户类型。

然而,我们有一个共同的模式是每个帐户类型的第一步都是相同的,但是我们想要测试每个帐户类型的一些独特方面。这是一个测试的高级视图:

all_account_types.each 做 |account_type|

  • 创建具有特征 account_type 的帐户工厂
  • 为帐户创建经理工厂
  • 5 个人工厂选择加入该帐户
  • 1 人然后选择退出
  • 经理创建并发送广播
  • 一个选择退出没有收到消息
  • 四个选择加入得到消息
  • 验证消息的格式(取决于帐户类型)

最后一个测试是问题...我们运行的测试取决于帐户的类型...目前我们在测试中有逻辑说明if account_type==X then Y.should include(Z)并且在进行测试时有效,但它会更好

4

1 回答 1

1

不要忘记这let是惰性求值的,这意味着您可以在示例或上下文之前覆盖测试设置:

context "Accounts" do
  let(:account) { Factory.create(:generic_account) }

  it "behaves like an account" do
    # ...
  end

  context "Manager account" do
    let(:account) { Factory.create(:manager_account }

    it "behaves like a manager account" do
       account.type.should == "manager"
       # ...
    end
  end
end
于 2012-10-05T00:51:47.953 回答