2009-06-04 2 views
3

rspecでActiveRecordを作成するときに、有効なレコードにフィクスチャを使用します。 しかし、テストでfxituresを使用すると、検証に失敗するようです。 次の例では、従業員は完全に有効であるように見えますが、仕様に関連する検証では無効となっています。例についてはActiveRecordを検証する際、有効になっていますか? => falseですが、errors.countにはエラーはありません。どうして?

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 

任意のアイデア私が検証の失敗を取得する理由は? (もちろん、私は中間コードをたくさん切り取っていますが、エラーが完全にどこか他の場所にある可能性があります)

答えて

5

@userを.save(bang!なし)の後にデバッグすることができます。モデルコールバックや、検証メソッドが行う何らかの原因によって引き起こされる可能性があります。あなたのテストでは、次のようにしてください:

@user.save 
puts @user.errors.inspect # or your command line debugger 

あなたのテストを実行するときに出力を読みます。

+0

それはトリックでした! 私も知らなかった 従業員(123).send(検証) は動作しません。あなたの時間のおかげでおかげで、オマール! – btelles

関連する問題