25

私は次のモデルを持っています:

class Company < ActiveRecord::Base
  has_and_belongs_to_many :regions

class Region < ActiveRecord::Base
  has_many :requests
  has_and_belongs_to_many :companies

class RequestForProposals < ActiveRecord::Base
  belongs_to :region

新しいリクエストを受け取るたびに、同じ地域で活動している企業に通知を送信したいと思います。

適切な会社を見つけるロジックを単体テストできるように、これをフィクスチャに設定するにはどうすればよいですか?

私はもう試した

region_ids: 1, 2
regions: one, two

Companies.ymlにありますが、どちらも会社にリージョンを割り当てる際には機能しません。

生成されたSQLの要点は次のとおりです:https ://gist.github.com/2713518

4

4 に答える 4

40

にとって

regions: one, two

動作さcompanies.ymlせるには、レールにリージョンのIDを自動割り当てさせる必要があります。これは、(companys.ymlの前にregions.ymlを読み取る必要がないようにするために)railsがcompanysフィクスチャの名前から結合テーブルに固定するIDを計算するためです。自分でIDを割り当てた場合、それらは計算されたIDと一致しません。

提供したSQLから、リージョンのIDを1と2に設定しているように見えます。つまり、regions.ymlには

one:
  id: 1
  name: MyString 

を削除するid:1と、大丈夫です。また、リージョンを参照する他のファイル(request_for_proposals.ymlなど)を更新して、置き換える必要があります。

region_id: 1

region: one

Railsは、フィクスチャregion_idにラベルが付いているリージョンのIDに設定することを意味することを認識します。one

于 2012-05-16T21:27:09.520 に答える
0

あなたのregions.ymlはtest/Fixturesディレクトリにありますか?Companies.ymlはどうですか?特定の会社のコード「regions:1、2」は機能するはずです。
テストを実行すると、Railsはこのディレクトリにフィクスチャを自動的にロードします。場所が正しい場合は、テストを実行するときにテスト出力(sql生成)を投稿してください。

于 2012-05-15T05:45:58.603 に答える
0

自分でそのようなIDを計算する必要がある場合は、受け入れられた回答に加えて、たとえば、いくつかの緩い参照や別のデータソースがある場合は、次を追加します。

def fixh(key)
  ActiveRecord::FixtureSet.identify key
end

あなたtest_helper.rbにそしてそれから据え付け品でこの方法を使用しなさい:

security_context1:
  ext_id: <%= fixh :user1 %>
于 2014-02-17T22:52:36.760 に答える
-1

最近、YAMLフィクスチャをどのように使用するのかわかりません。テスト中にデータベースオブジェクトインスタンスを作成するためにFactoryGirlを試しましたか?ただし、非常に洗練された方法で、フィクスチャとほとんど同じです。

次の節ではrspec、テストフレームワークとして使用していることを前提としています。

に含め、s READMEに従って更新した後factory_girl-rails、次Gemfileのファイルを作成します。spec/spec_helper.rbfactory_girl

# spec/factories/company_factories.rb
FactoryGirl.define do
  factory :company do
    title { |n| "Test Company #{n}" }

    # whatever else fields

    after_create { |company| company.regions << FactoryGirl.create(:region) }
  end
end

# spec/factories/region_factories.rb
FactoryGirl.define do
  factory :region do
    # whatever fields here
  end
end

# spec/factories/request_factories.rb
FactoryGirl.define do
  factory :request do        
    # whatever fields here
  end
end

さて、本当の問題は-あなたがしている実際のテストコードは何ですか?

于 2012-05-14T07:59:19.133 に答える