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

Expect で {} を使用すると、実際には Expect メソッドを実行しているのではなく、Expect ブロックを送信していることになります。だから改名

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 (スタイルの好みを説明する):

これにより、「true は false である必要があります」ではなく、「$foo が有効であると期待されていましたが、そうではありませんでした」などの読み取り可能なエラー メッセージが表示されます。

「より良いスタイル」で、私はshould. したがって、以下は非推奨の構文を使用しませんが、依然としてマッチャーを使用します。

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