什么是assert(minitest)

时间:2016-04-03 15:22:00

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

我正在关注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

但是,运行此测试时出现Argument错误。看来RSpec在测试用例中只需要一个参数。

2 个答案:

答案 0 :(得分:0)

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

user.email = valid_address

@user.email = valid address

您提供了2个参数,expect语句需要一个。

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

答案 1 :(得分:0)

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

be

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

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

在这里,RSpec看到两个参数被传递给expect(@user.valid?).to be(true), "#{valid_address.inspect} is not correct" 方法,该方法是有效的。