Это мои текущие настройки тестирования:
# spec/factories.rb
require 'factory_girl'
FactoryGirl.define do
# Roles
factory :user_role, :class => Role do
name 'User'
end
# Users
factory :user, :class => User do
sequence(:email) {|n| "email#{n}@example.com" }
password 'password'
password_confirmation 'password'
name 'Yuri Userington'
roles { |a| [a.association(:user_role)] }
end
# Instruments
factory :instrument, :class => Instrument do
title "Doobie Doo Instrument Title"
is_valid true
association :user, :factory => :user
end
# Sequences
sequence :email do
"email#{n}@factory.com"
end
end
# spec/controllers/instruments_controller_spec.rb
require 'spec_helper'
describe InstrumentsController do
before (:each) do
@instrument = FactoryGirl.create(:instrument)
@attr = FactoryGirl.attributes_for(:instrument)
@user = FactoryGirl.create(:user)
end
describe "GET index" do
it "assigns all instruments as @instruments" do
instrument = Instrument.new(@attr)
instrument.user = @user
instrument.save!
get :index
assigns(:instruments).should eq([instrument])
end
end
end
В результате, когда я запускаю свои тесты, у меня появляются следующие ошибки:
Failures:
1) InstrumentsController GET index assigns all instruments as @instruments
Failure/Error: @instrument = FactoryGirl.create(:instrument)
ActiveRecord::RecordNotFound:
Couldn't find Role with id=2
# ./app/models/user.rb:21:in `assign_role_after_sign_up'
# ./spec/controllers/instruments_controller_spec.rb:24:in `block (2 levels) in <top (required)>'
Исходя из этого, мне кажется, что вызов ассоциаций ролей в моем: фабрика пользователей НЕ вызывается - что я здесь не так делаю? Я использую это совершенно неправильно?
спасибо !!