【问题标题】:Rspec error in ruby code testingruby 代码测试中的 Rspec 错误
【发布时间】:2015-11-23 17:51:11
【问题描述】:

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 在创建时调用 calculate_word_frequency 失败/错误:DEFAULT_FAILURE_NOTIFIER = lambda { |failure, _opts|引发失败} 恰好一个实例应该收到以下消息但没有收到:calculate_word_frequency

如何解决此错误。如何通过此测试?

【问题讨论】:

  • 这不是错误,这是测试失败,这是 RSpec 完全正常的部分。
  • 修复您的代码或规范。根据您的规范,应在初始化期间调用 calculate_work_frequency。这是否是正确的行为——我们不知道。

标签: ruby rspec


【解决方案1】:

我相信您问的是“为什么我会收到此错误消息?”而不是“为什么我的规范没有通过?”

您收到此特定错误消息的原因是您在规范中使用了 expect_any_instance_of,因此 RSpec 在其自己的代码中而不是在您的代码中引发了错误,本质上是因为它在没有异常的情况下到达执行结束,但没有你的间谍也被称为。错误消息的重要部分是:Exactly one instance should have received the following message(s) but didn't: calculate_word_frequency。这就是您的规范失败的原因;只是显然 RSpec 决定给你一个用处不大的异常和回溯。

今天我的一个规格也遇到了同样的问题,但没有比预期失败更严重的了。希望这有助于为您解决问题。

【讨论】:

    【解决方案2】:

    这个测试的重点是确保构造函数调用方法。写得很清楚,很直接。

    如果您希望测试通过,请修改构造函数,使其调用方法。

    【讨论】:

    • 我无法理解如何通过这个?
    • @HaseebAhmad 修复您的代码或规范。根据您的规范,应在初始化期间调用 calculate_work_frequency。这是否是正确的行为——我们不知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多