0

私は次のrspecを持っています:

require 'spec_helper'

describe KnowledgesController do

  before (:each) do
    @knowledge = FactoryGirl.create(:knowledge)
    @professor = FactoryGirl.create(:professor)
    sign_in @professor
  end

  describe "GET 'show'" do

    it "should be successful" do
      response.should be_success
    end

  end

end

これを実行すると、次のエラーが発生します。

Failure/Error: @professor = FactoryGirl.create(:professor)
     ActiveRecord::RecordInvalid:
       translation missing: es.activerecord.errors.messages.record_invalid
     # ./spec/controllers/knowledge_controller_spec.rb:7:in `block (2 levels) in <top (required)>'

これを変更した場合:

before (:each) do
        @knowledge = FactoryGirl.create(:knowledge)
        @professor = FactoryGirl.create(:professor)
        sign_in @professor
      end

にとって:

 before (:each) do
    @professor = FactoryGirl.create(:professor)
    @knowledge = FactoryGirl.create(:knowledge)
    sign_in @professor
 end

このエラーが発生します:

Failure/Error: @knowledge = FactoryGirl.create(:knowledge)
     ActiveRecord::RecordInvalid:
       translation missing: es.activerecord.errors.messages.record_invalid

ですから、ある場合には知識にかかっており、別の場合には教授にかかっているので、記録が無効であるという問題ではないと思います。

何が起こっているのか考えていますか?

工場は次のとおりです。

#Knowledge

FactoryGirl.define do
  factory :knowledge do |knowledge|
    knowledge.association(:professor)
    knowledge.association(:subject)
    knowledge.association(:level)
  end
end

#Professor

FactoryGirl.define do
    factory :professor do
      first_name 'Mister'
      last_name 'Professor'
      ...
    end
end
4

1 に答える 1

1

知識クラスには、関連する教授の記録があります。createメソッドに明示的な教授レコードを一時停止していないため、知識を作成すると同時に新しい教授を作成しています。

どういうわけか、あなたは同じ属性を持つ2人の教授を作成しています。一意性の検証またはこのようなものが必要です。

これを試して:

before (:each) do
  @professor = FactoryGirl.create(:professor)
  @knowledge = FactoryGirl.create(:knowledge, :professor => @professor)
  sign_in @professor
end

動作するはずです。

于 2012-06-28T23:54:21.047 に答える