我正在关注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在测试用例中只需要一个参数。
答案 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"
方法,该方法是有效的。