rspec で ActiveRecord を作成するとき、有効なレコードにはフィクスチャを使用します。しかし、テストでフィクスチャを使用すると、検証に失敗するようです。次の例では、従業員は完全に有効であるように見えますが、仕様内の関連する検証では無効であると示されています。
class Employee < ActiveRecord::Base
validates_presence_of :email
end
class User < ActiveRecord::Base
validates_associated :employee
end
#Command line debugger in 'debugger' (below) returns:
Employee.find(745185059).errors.count # => 0
Employee.find(745185059).errors.full_messages # => []
Employee.find(745185059).valid? # => true
例えば:
describe SessionsController do
fixtures :users, :employees
describe "Logging in by cookie" do
def set_remember_token token, time
@user[:remember_token] = token;
@user[:remember_token_expires_at] = time
debugger
@user.save! # THIS SAYS THE EMPLOYEE IS INVALID, but why, if the fixtures are good?
end
it 'logs in with cookie' do
stub!(:cookies).and_return({ :auth_token => 'hello!' })
logged_in?.should be_true
end
end
end
検証が失敗する理由はありますか? (もちろん、中間コードの多くを切り取っています。エラーが完全に別の場所にある可能性があります)