【问题标题】:Expecting string but getting nil in Rspec test期待字符串但在 Rspec 测试中得到零
【发布时间】:2015-11-30 04:19:38
【问题描述】:

我正在处理一个名为“Speaking Grandma”的 Ruby 问题,我需要创建一个方法,该方法应该接受一个包含短语的字符串参数,并检查该短语是否全部大写:如果不是t,那奶奶就听不到你的声音了。然后她应该回应(返回)HUH?!大声说出来,桑尼!

但是,如果您对她大喊大叫(即使用包含全大写短语的字符串参数调用该方法,那么她可以听到您的声音(或者至少她认为她可以)并且应该以 (return) NO 回应,不是自 1938 年以来!。

我写了以下代码:

def speak_to_grandma(input)
if
  input != input.upcase
  puts 'HUH?! SPEAK UP, SONNY!' 
else
  puts 'NO, NOT SINCE 1938!'
end
end

当我运行 RSpec 时,两个测试都失败了。它给出以下消息:

Failure/Error: expect(speak_to_grandma('Hi Nana, how are you?')).to eq 'HUH?! SPEAK UP, SONNY!'
       expected: "HUH?! SPEAK UP, SONNY!"
            got: nil 

 Failure/Error: expect(speak_to_grandma('WHAT DID YOU EAT TODAY?')).to eq "NO,          NOT SINCE 1938!"
       expected: "NO, NOT SINCE 1938!"
            got: nil
       (compared using ==)

我不知道我在这里做错了什么。有人可以帮忙吗?

【问题讨论】:

  • speak_to_grandma 没有返回预期的字符串,它正在打印它。来自 RSpec 的eq 正在检查将为零的返回值(因为这是puts 返回的值)。查看this documentation,它可用于检查预期输出。
  • 哇!谢谢!只需要你的一点指导,我已经想通了!太棒了!

标签: ruby-on-rails ruby rspec


【解决方案1】:

speak_to_grandma 方法返回puts 方法的返回值,是该方法的最后一行。 puts的返回值为nil(Why are all my puts returning =>nil?)

Rspec 中的eq 方法检查方法的返回值。该字符串以puts 输出到屏幕,但返回值为nil,这就是Rspec 正在检查的内容。

如果删除puts,测试应该通过,因为字符串将是方法的返回值。但正确的方法是使用 Rspec 中的output 方法对其进行测试。像这样编写你的测试:

expect { speak_to_grandma('WHAT DID YOU EAT TODAY?') }.to output("NO, NOT SINCE 1938!").to_stdout

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多