2013-11-04 96 views
0

我一直在构建我的应用程序,现在我准备开始测试。我在Seed.rb中定义了Factory女孩,但是当我正在运行测试时,我还在Rspec的惯常位置/spec/factories.rb中定义了测试。未定义的方法`first_name ='Rspec +工厂

但是,我的第一次测试失败,出现以下错误。

user_spec.rb

require 'spec_helper' 

describe User do 
    it "should have valid factory" do 
    FactoryGirl.build(:user1).should be_valid 
    end 
end 

返回错误:

Failures: 

    1) User should have valid factory 
    Failure/Error: FactoryGirl.build(:user1).should be_valid 
    NoMethodError: 
     undefined method `first_name=' for #<User:0x000000061410f8> 
    # ./spec/models/user_spec.rb:5:in `block (2 levels) in <top (required)>' 

Finished in 0.05459 seconds 
1 example, 1 failure 

Failed examples: 

rspec ./spec/models/user_spec.rb:4 # User should have valid factory 

Randomized with seed 29084 

spec/factories.rb

FactoryGirl.define do 
    factory :admin1, class: User do 
    first_name "admin" 
    last_name "minstrator" 
    password "admin1234" 
    profile_name "profilename" 
    email "[email protected]" 
    password_confirmation "admin1234" 
    admin true 
    end 

    factory :user1, class: User do 
    first_name "user2" 
    last_name "man2" 
    password "user1234" 
    profile_name "profilename" 
    email "[email protected]" 
    password_confirmation "user1234" 
    admin false 
    end 

    end 

它在我seed.rb使用上发展数据时能正常工作,但现在我已经开始使用Rspec进行测试它都出错了。

我在这里做错了什么。我目前不是一个很大的测试迷,但我需要提高我的技能,因为我知道它对于Web应用程序非常有用。

您的帮助是非常感谢,请让我知道如果您需要了解更多的信息。

回答

1

如果你的代码在开发中,但没有在测试中,我的猜测是你的数据库测试副本不同步。尝试运行rake db:test:preparerake db:test:clone并再次运行您的规格。

注:

db:test:clone没有在Rails的要求4.2.0 'WARNING: db:test:clone is deprecated. Rails的测试助手现在可以自动保持你的测试模式,请参见发行说明有关详细信息“)

+0

都能跟得上,不工作,但是当我尝试耙分贝:重置我得到未定义的方法相同的错误FIRST_NAME –

+0

你可以发表你的'schema.rb ' – gotva

+0

谢谢Scott。这个问题一直在打击我。是不是直到你提到的数据库可能不同步,我跳入'rails console -e test'并运行'User'来查看我的'first_name'字段不存在。冉你的建议答案和所有修正! :) –

0

我。相信这里的问题是我的一个迁移失踪,并且因为它没有用户first_name,所以没有任何定义。

对所有新手来说都是一个大提示,永远不会删除你的任何迁移。

由于辛普森十分正确地说,“D'哦”

相关问题