ruby-on-rails - 为什么这个简单的 RSpec 字符串相等规范会失败?

标签 ruby-on-rails ruby ruby-on-rails-3 rspec

给定这个类:

class First
  def to_s ; "Hello World" ; end
end

和这个规范:

require 'first'

describe First do
  describe "#to_s" do
    it { should == "Hello World" }
  end
end

我得到:

Failures:

  1) First#to_s 
     Failure/Error: it { should == "Hello World" }
       expected: "Hello World"
            got: Hello World (using ==)
       Diff:
       @@ -1,2 +1,2 @@
       -"Hello World"
       +Hello World
     # ./spec/first_spec.rb:5:in `block (3 levels) in <top (required)>'

但我希望这会过去。我的问题是:

  • 合格的规范会是什么样子?
  • 为什么这个规范没有通过,特别是?

最佳答案

你的外部 describe block :

describe First do

设置内部例子的主题to be an instance of 首先。也就是说,您描述的所有 it 都将是一个 First 对象。文本 #to_s 示例不指示 rspec 在对象上调用 to_s

由于 First.new 不等于 "Hello World" 规范失败。

但是,由于 rspec 确实调用了对象上的 to_s 以在故障描述中输出它,因此“Hello World”确实出现在那里。您可以尝试以下操作以确保正在测试字符串转换:

its(:to_s) { should == "Hello World" }

关于ruby-on-rails - 为什么这个简单的 RSpec 字符串相等规范会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9778657/

相关文章:

ruby-on-rails-3 - Spree、Rails 3 和主题

ruby-on-rails - 无方法错误 :undefined method `symbolize_keys' in rspec test

ruby-on-rails - 从 Django 到 Rails

ruby-on-rails - accepts_nested_attributes_for 对于 has_one 关系不能正常工作

javascript - 如何使用基于 token 的身份验证来保护网页?

ruby-on-rails - 如何将现有的 Rails 应用程序嵌入/安装到另一个 Rails 应用程序中?

ruby-on-rails - 访问我的 AWS S3 帐户的存储桶时出现问题

ruby - 为什么 `each do` 会在带注释的方法定义中导致语法错误?

ruby - Ruby(和其他语言)中哈希的良好显式命名风格

ruby-on-rails - Capybara webkit无效响应错误,如何调试?