2015-11-23 67 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决定给你一个不太有用的例外和回溯。

今天我遇到了一个与我的规格相同的问题,但没有比失败的期望更严重。希望这有助于为您清除它。