2015-05-28 24 views
0

使用Rails 4.1.8和RSpec 3.2.1RSpec的測試預期(user.save)未能上。爲了be_true

該測試通過在我的RSpec的寶石2.0其他應用程序。

它也適用於開發模式。如果我使用全部大寫的電子郵件創建用戶,它將以小寫形式保存在數據庫中。

這是我的失敗消息:

Failures: 

    1) User validations #downcase_email downcases an email before saving 
    Failure/Error: expect(user.save).to be_true 
     expected false to respond to `true?` 
    # ./spec/models/user_spec.rb:52:in `block (4 levels) in <top(required)>' 

測試:

require 'rails_helper' 
describe User do 
    let(:valid_attributes) { 
    { 
     user_name: "username", 
     email: "[email protected]", 
     password: "password", 
     password_confirmation: "password" 
    } 
    } 
    describe "#downcase_email" do 
    it "downcases an email before saving" do 
     user = User.new(valid_attributes) 
     user.email = "[email protected]" 
     expect(user.save).to be_true 
     expect(user.email).to eq("[email protected]") 
    end 
    end 
end 

我的用戶模型:

class User < ActiveRecord::Base 
    has_secure_password 

    validates :user_name, presence: true, 
         uniqueness: true 

    validates :email, presence: true, 
        uniqueness: true, 
        format: { 
         with: /\A[A-Za-z0-9._%+-][email protected][A-Za-z0-9\.-]+\.[A-Za-z]+\Z/ 
        } 

    before_save :downcase_email      

    def downcase_email 
    self.email = email.downcase 
    end      
end 

感謝您的幫助,您可以提供。

+0

如果我消除了user_name上的唯一性驗證,則我的測試通過。也許是有兩個獨特的驗證問題?一切工作正常在開發中。 –

+0

當你檢查user.errors.full_messages時會發生什麼? – stytown

+0

如果我創建一個新用戶,'user.errors.full_messages'產生一個空數組。 '=> []'。 –

回答

-1

看起來,即使一個獨特的電子郵件測試通過,要求一個唯一的用戶名是防止保存。使用工廠女生username#{n}讓我的測試通過。

+0

這不是您最初提問的答案。格雷西拉或羅布應該被賦予這個答案的功勞。 –

+0

我應該給予那些給我解決方案的人,我已經嘗試過並且沒有工作?因爲我的問題是如何讓測試通過在開發中運行良好的測試模式,這似乎是對我的問題的正確答案。 –

+0

您得到的第一個錯誤是因爲您的RSpec語法錯誤。第二個是因爲你的測試沒有創建必要的數據。正如Rob W所說,完全不同。 –

1

更改be_trueeq true。你擁有它的方式是在TrueObject上調用#true方法。

+0

我試過eq正確,但仍然失敗。 –

+0

它是一樣的錯誤嗎? –

+0

或多或少。 '預期:真的有:錯誤' –

2

嘗試使用be trueeq true。但這只是問題的一部分,因爲您似乎有驗證錯誤。爲了調查這個檢查錯誤user.errors

+0

如果您指的是rails控制檯中的user.errors。我可以創建一個用戶就好了。沒有錯誤,電子郵件在downcased。我試過所有的'be_true','be true','eq true','be_truthy'。 –