2

rspec+fabricationを使用して簡単なテストを実行しようとしています。残念ながら、これに関するまともな記事はそれほど多くありません。

spec / model/event_spec.rb内

require 'spec_helper'

describe Event do
  subject { Fabricate(:event) }

  describe "#full_name" do
    its(:city) { should == "LA" }
  end

end

spec/fabricators/event_fabricator.rb内

Fabricator(:event) do
  user { Fabricate(:user) }

  # The test works if I uncomment this line:
  # user_id 1

  city "LA"
  description "Best event evar"
end

spec/fabricators/user_fabricator.rb内

Fabricator(:user) do
  name 'Foobar'
  email { Faker::Internet.email }
end

私は得続けます:

 1) Event#full_name city 
     Failure/Error: subject { Fabricate(:event) }
     ActiveRecord::RecordInvalid:
       Validation failed: User can't be blank

PS rspecとファブリケーションの開始について読む価値のあるオンライン記事/チュートリアルを知っている人がいれば、PS。私に知らせてください

4

1 に答える 1

6

Fabricatorの機能の1つは、関連付けを遅延生成することです。つまり、モデルでアクセサーが呼び出されUserない限り、関連付けは生成されません。userEvent

Eventモデルに検証があり、存在する必要があるようUserです。この場合、次のようにファブリケーターを宣言する必要があります。

Fabricator(:event) do
  # This forces the association to be created
  user!
  city "LA"
  description "Best event evar"
end

これにより、Userモデルがと一緒に作成されEvent、検証に合格できるようになります。

参照:http ://fabricationgem.org/#!defining-fabricators

于 2012-03-19T20:02:03.943 に答える