正如标题所示,我正在尝试使用 Rspec 测试自定义验证器。我收到一个错误,我不明白为什么...如果你能提供一些启示,我将不胜感激。来吧:
验证人规范
require 'spec_helper'
describe GraphDateValidator do
it "should not validate activity with empty start time" do
expect { Graph.new( {start_time: ''}).valid? }.to eq(false)
end
end
如果我打印Graph.new( {start_time: ''}).valid?
它会打印false
但是,当它通过规范时,它会返回一个 Proc 对象:
expected: false
got: #<Proc:0x007fe5853fdd48@/Users/MLP/...
谁能告诉我为什么我会得到那个 proc 对象?谢谢!
通过在期望中使用 {},那么您实际上不是在执行期望方法---而是在发送期望块。所以重命名为
it "should not validate activity with empty start time" do
expect( Graph.new( {start_time: ''}).valid? ).to eq(false)
end
为了获得更好的样式和失败消息,您可以使用 rspec 的谓词匹配器:
it "does not accept empty start time" do
Graph.new( {start_time: ''}).should_not be_valid
end
编辑 1(解释风格品味):
这为您提供了可读的错误消息,例如"预期$foo有效,但不是",而不是"true 应该是 false"。
对于"更好的风格",我指的是使用匹配器(正如我所写的),而不是should
。因此,以下内容不会使用已弃用的语法,但仍使用匹配器:
it "does not accept empty start time" do
expect( Graph.new( {start_time: ''}) ).to be_valid
end