0

私は最近 RoR と TDD の学習を開始しましたが、このシナリオを処理する最善の方法を見つけるのに苦労しています。

同じ検証を共有する 2 つのフィールドを持つ ActiveRecord モデルがあります。

同様のフィールドに対して同じテストを利用する RSpec テストを作成するにはどうすればよいですか?

「共有例」は、このシナリオで利用する有望な機能のように見えましたが、モデル全体をテストする必要があり、個々のフィールドを共有例に渡すだけであるため、機能していないようです。

以下は私の失敗した試みです:

describe Trip do
  before do
    @trip = trip.new(date: '2013-07-01', city_1: "PORTLAND", 
            city_2: "BOSTON")
  end

  subject { @trip }

  shared_examples "a city" do
    describe "when not uppercase" do
      before { city = city.downcase }
      it { should_not be_valid }
    end
  end

  describe "city_1 must be valid" do
    it_should_behave_like "a city" do
      let!(:city) { @trip.city_1}
    end
  end

  describe "city_2 must be valid" do
    it_behaves_like "a city" do
      let!(:city) { @trip.city_2}
    end
  end
end

これは、city 変数を更新してもトリップ モデルが更新されないため、失敗します。それを動的にモデルに結び付ける方法はありますか?

ところで、各フィールドの下に貼り付けると、すべてのテストが単独で機能します。shared_example のコンテキストでは機能しません。

ガイダンスをいただければ幸いです。

4

1 に答える 1

0

ループ内でアサーションを実行し、少しメタプログラミングを使用することもできますが、私はそれをお勧めしません。テストは、多少重複することを意味する場合でも、できるだけ単純でわかりやすいものにする必要があります。関係するフィールドが 2 つだけの場合は、それを繰り返します。

于 2013-04-21T20:56:56.107 に答える