2014-04-29 38 views
2

我有一个用户的工厂是这样的:发现错误

FactoryGirl.define do 
    factory :user do 
    email "[email protected]" 
    password "123456789" 
    end 
end 

我试图为用户创造一个规范:

describe User do 
    it "should create a user with password" do 
    user = FactoryGirl.create(:user, password: "secret") 
    user.password.should == "secret" 
    end 
end 

当我运行测试,我得到这样的信息:

1) User should create a user with password 
    Failure/Error: user = FactoryGirl.create(:user, password: "secret") 
    ActiveRecord::RecordInvalid: 
     is invalid 
    # ./spec/models/user_spec.rb:3:in `block (2 levels) in <top (required)>' 
    # -e:1:in `<main>' 

问题是:如何发现模型中哪些字段是无效的?换句话说,如何在模型中打印错误消息?

回答

6

您可以将测试总是暂时更改为:

user = FactoryGirl.build(:user, password: "secret") 

,然后检查user.valid?user.errors

0

有时build方法给你同样的ActiveRecord::RecordInvalid: Record invalid。在这种情况下,您可能需要查找您的工厂创建的任何关联记录,而不是验证问题。

+0

如果我没有误解你在说什么,那么建立记录时就不可能得到错误,因为构建不应触发.save!在记录上。如果你的记录触发.save!在创造新纪录的时候,你可能会做出一些非常错误的事情。 –