2012-02-15 109 views
-1
require 'spec_helper' 

describe User do 

    before(:each) do 
    @attr = { 
     :username => "User", 
     :email => "[email protected]", 
     :password => "foobar", 
     :password_confirmation => "foobar", 
     :phone_no => "0808322222" 
    } 
    end 

    it "should create a new instance given a valid attribute" do 
    User.create!(@attr) 
    end 
end 

測試持續失敗,請不知道爲什麼設計,RSpec的和Mongoid測試失敗

Failures: 

    1) User should create a new instance given a valid attribute 
    Failure/Error: User.create!(@attr) 
    Mongoid::Errors::Validations: 
     Validation failed - Phone no can't be blank, Username can't be blank. 
    # ./spec/models/user_spec.rb:16:in `block (2 levels) in <top (required)>' 

Finished in 0.2505 seconds 
2 examples, 1 failure 
+0

我們需要的型號知道哪裏是你的內部錯誤。也許你使用attr_accessible或attr_protected – shingara 2012-02-15 13:49:29

+0

@shingara我在https://gist.github.com/1835904粘貼了User模型我正在使用attr_accessible – bjhaid 2012-02-15 13:59:59

回答

1

你的問題是你用#創建方法,其中的數據是不是就是attr_accessible屬性定義了一些數據。

所以您可以在attr_accessible你名單上添加此屬性可避免例如使用大量assignement:

it "should create a new instance given a valid attribute" do 
    u = User.new 
    @attr.each do |k,v| 
     u.send("#{k}=", v) 
    end 
    u.save! 
    end 
+0

我使用了你提供的這個片段,並且有這個錯誤: 1)用戶應該創建一個新的實例給定一個有效的屬性 故障/錯誤:u.send(K 「=」,v) NoMethodError: 未定義的方法'K」爲# # ./spec/models/user_spec.rb:18:in ' #./spec/models/user_spec.rb:17:in'each' #./spec /models/user_spec.rb:17:in ' 我註釋掉了attr_accessibl在線模型和測試通過,所以我知道在哪裏看,我會修復它以後,非常感謝 – bjhaid 2012-02-15 14:35:36

+0

對不起,我修正了我的代碼片段與發送(「#{k} =」,v)' – shingara 2012-02-15 14:46:51

+0

謝謝,它的工作 – bjhaid 2012-02-16 04:24:44