【问题标题】:What is the RSpec syntax equivalent for assert (minitest)断言(minitest)的RSpec语法等价物是什么
【发布时间】:2016-04-03 15:22:00
【问题描述】:

我正在关注 Michael Hartl 的 Ruby on Rails 教程。我观察到他使用 minitest 来运行他的测试。我使用 RSpec。下面是我想用 RSpec 复制的教程中的一行代码

test "email validation should accept valid addresses" do
  valid_addresses = %w[user@example.com USER@foo.COM A_US-ER@foo.bar.org
                     first.last@foo.jp alice+bob@baz.cn]
  valid_addresses.each do |valid_address|
    @user.email = valid_address
    assert @user.valid?, "#{valid_address.inspect} should be valid"
  end
end

这就是我将如何在 RSpec 中做到这一点。

it "email validation should accept valid addresses" do
  valid_addresses = ["user@example.com", "USER@foo.COM", "A_US-ER@foo.bar.org",
                     "first.last@foo.jp", "alice+bob@baz.cn"]
  valid_addresses.each do |valid_address|
    user.email = valid_address
    expect(@user.valid?).to be true, "#{valid_address.inspect} is not correct"
  end
end

但是,我在运行此测试时收到参数错误。看来 RSpec 只希望在测试用例中有一个参数。

【问题讨论】:

    标签: ruby-on-rails rspec railstutorial.org


    【解决方案1】:

    RSpec 认为您将一个参数传递给 to 方法,并将两个参数传递给 be 方法,因此它会给您一个错误。它将您的陈述视为:

    expect(@user.valid?).to(be(true, "#{valid_address.inspect} is not correct"))
    

    因此,您可以将规范更改为以下内容,它应该可以工作:

    expect(@user.valid?).to be(true), "#{valid_address.inspect} is not correct"
    

    在这里,RSpec 看到两个参数被传递给 to 方法,这是有效的。

    【讨论】:

      【解决方案2】:

      您收到的错误消息究竟是什么。看起来你有一个错字。应该

      user.email = valid_address
      

      成为

      @user.email = valid address
      

      您提供 2 个参数,而期望语句接受一个。

      expect(@user.valid?).to be true
      

      【讨论】:

      • 这是一个错字@margo,user 应该是@user。错误信息是:ArgumentError: wrong number of arguments (given 2, expected 1)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      相关资源
      最近更新 更多