2017-08-25 87 views
0

一個類User有一個調用has_one_time_password(encrypted: true) 我想測試該用戶類具有該調用。Rspec如何測試類調用單例類方法

class User < ApplicationRecord 
#... 
has_one_time_password(encrypted: true) 
#.. 
end 

我已經試過

expect(User).to receive(:has_one_time_password).with(encrypted: true) 

,但我得到的消息,有消息expected: 1, received: 0

+0

正如已經在答案中提到的那樣:一旦您引用用戶類方法被加載。因此你的斷言失敗了。 但更重要的是:該測試應該怎麼樣?恕我直言,以測試如果這種方法被稱爲沒有多大意義。 –

回答

0

我認爲,在當時的expect(User)...上面運行時,class User < ApplicationRecord ... end已經加載到內存中,因爲你的rails_helper.rb它有一條線在它的頂部:

require File.expand_path("../../config/environment", __FILE__)

expect(User).to receive(:has_one_time_password).with(encrypted: true) 
require 'user' 

附註:

因此,除非你手動加載它像下面你將不能夠抓住它還沒有測試過。此外,個人而言,我寧願測試「行爲」,不測試代碼本身,所以也許我會寫一個測試has_one_time_password實際上做什麼

相關問題