ここに私の工場があります:
スペック/factories.rb
FactoryGirl.define do
factory :user do
username 'user1'
time_zone 'Eastern Time (US & Canada)'
email 'user@example.com'
password 'testing'
end
factory :product do
name 'Great Product'
about 'this is stuff about the product'
private false
end
end
私の製品モデル:
models/product.rb
class Product < ActiveRecord::Base
attr_accessible :about, :name, :private
belongs_to :user
has_many :prices
validates_presence_of :name
validates_presence_of :user_id
end
これは、Rspec とShouldaを使用した私のテストです。
スペック/モデル/product_spec.rb
require 'spec_helper'
describe Product do
before(:each) do
FactoryGirl.build(:product)
end
it { should have_many(:prices) }
it { should belong_to(:user) }
it { should validate_presence_of :name }
it { should validate_presence_of :user_id }
end
テストはパスしましたが、関連付けのためにこれを行うことになっていると思いました。
factory :product do
name 'Great Product'
about 'this is stuff about the product'
private false
user # <--
end
エラーでこれを行うと、すべてのテストが失敗します。
ActiveRecord::RecordInvalid:
Validation failed: Time zone is not included in the list
工場で作成したユーザーを本当に割り当てているのでしょうか。
編集
ユーザー.rb
has_many :products
validates_presence_of :username
validates_presence_of :time_zone
validates_format_of :username, :with => /^(?=(.*[a-zA-Z]){3})[a-zA-Z0-9]+$/
validates_uniqueness_of :email
validates_uniqueness_of :username, :case_sensitive => false
validates_length_of :username, :within => 3..26
validates_inclusion_of :time_zone, :in => ActiveSupport::TimeZone.us_zones