5

正如标题所示,我正在尝试使用 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 对象?谢谢!

4

2 回答 2

15

通过在你的期望中使用 {},那么你实际上并没有执行期望方法——而是你发送期望一个块。所以重命名为

it "should not validate activity with empty start time" do
  expect( Graph.new( {start_time: ''}).valid? ).to eq(false)
end
于 2012-11-17T19:46:58.470 回答
-2

要获得更好的样式和失败消息,您可以使用 rspec 的谓词匹配器:

it "does not accept empty start time" do
  Graph.new( {start_time: ''}).should_not be_valid
end

编辑1(解释风格品味):

这为您提供了可读的错误消息,例如“预期 $foo 有效,但不是”而不是“真应该是假”。

使用“更好的风格”,我指的是使用 Matcher(如我所写),而不是should. 所以下面不会使用不推荐使用的语法,但仍然使用匹配器:

it "does not accept empty start time" do
  expect( Graph.new( {start_time: ''}) ).to be_valid
end
于 2013-03-14T20:16:16.563 回答