2015-11-23 69 views
-2

Rspec的代碼是一流的Rspec的錯誤

it "calls calculate_word_frequency when created" do 
    expect_any_instance_of(LineAnalyzer).to receive(:calculate_word_frequency) 
    LineAnalyzer.new("", 1) 
end 

代碼是

def initialize(content,line_number) 
@content = content 
@line_number = line_number 
end 

def calculate_word_frequency 
h = Hash.new(0) 
abc = @content.split(' ') 
abc.each { |word| h[word.downcase] += 1 } 

sort = h.sort_by {|_key, value| value}.reverse 
puts @highest_wf_count = sort.first[1] 

a = h.select{|key, hash| hash == @highest_wf_count } 
puts @highest_wf_words = a.keys 
end 

這個測試提供了一個錯誤

LineAnalyzer calls calculate_word_frequency when created Failure/Error: DEFAULT_FAILURE_NOTIFIER = lambda { |failure, _opts| raise failure } Exactly one instance should have received the following message(s) but didn't: calculate_word_frequency

我如何解決這個error.How我通過這個測試?

+0

這不是一個錯誤,這是一個失敗的測試,這是RSpec的一個完全正常的部分。 – meagar

+0

我如何通過它.. –

+1

修復您的代碼或您的規範。根據你的規範,應該在初始化期間調用'calculate_work_frequency'。無論這是否是正確的行爲 - 我們不知道。 –

回答

2

此測試的全部要點是確保構造函數調用該方法。它以非常簡單的方式寫得很清楚。

如果您希望測試通過,請修改構造函數,以便調用該方法。

+0

我不明白如何通過這個? –

+1

@HaseebAhmad修復你的代碼或你的規範。根據你的規範,應該在初始化期間調用'calculate_work_frequency'。無論這是否是正確的行爲 - 我們不知道。 –

1

我相信你問「爲什麼我會收到此錯誤消息?」而不是「爲什麼我的規範不通過?」

你得到的是你在使用規範expect_any_instance_of,所以RSpec的自己的代碼中,而不是在你的本質提出的錯誤,因爲它達到執行結束時沒有異常,但沒有此特定錯誤信息的原因您間諜被稱爲任一。錯誤消息的重要部分是:Exactly one instance should have received the following message(s) but didn't: calculate_word_frequency。這就是你的規格失敗的原因。這顯然是RSpec決定給你一個不太有用的例外和回溯。

今天我遇到了一個與我的規格相同的問題,但沒有比失敗的期望更嚴重。希望這有助於爲您清除它。