2

私たちのアプリは複数の種類のアカウントをサポートしているため、多くのテストはすべての種類のアカウントで繰り返されます。

ただし、一般的なパターンでは、最初の手順は各アカウント タイプで同じですが、途中で各アカウント タイプの固有の側面のいくつかをテストしたいと考えています。1 つのテストの概要を次に示します。

all_account_types.each do |account_type|

  • 特性 account_type でアカウント ファクトリを作成する
  • アカウントのマネージャ ファクトリを作成する
  • 5 人の工場がそのアカウントにオプトイン
  • 1 人がオプトアウト
  • マネージャーがブロードキャストを作成して送信する
  • 1つのオプトアウトはメッセージを受け取りません
  • 4 つのオプトインがメッセージを受け取ります
  • メッセージの形式を確認します (アカウントの種類によって異なります)。

最後のテストが問題です...実行するテストはアカウントの種類によって異なります...現在、テストを実行する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 に答える