2017-04-11 30 views
0

最小の仕様でレールに私はActiveSupport::TimeWithZoneが特定の範囲にあるかどうかをチェックしようとしています。私はbetween?メソッドを使用して、範囲の最小値と最大値をとると考えました。ここでMinitestスペックでいることを私が表現しています方法は次のとおりです。 2つの引数を持つメソッドをMinitest Specアサーションに渡すにはどうすればよいですか?

_(language_edit.curation_date).must_be :between?, 10.seconds.ago, Time.zone.now 

が、それは私にこのエラーを与える:

Minitest::UnexpectedError: ArgumentError: wrong number of arguments (1 for 2)

私が間違って何をしているのですか?

+0

'の間に?'は2つの引数を想定しています。あなたはそれの後にコンマを持っています、私はあなたがカッコを使用することをお勧めします。 'between? '(10.seconds.ago、Time.zone.now)' – radubogdan

+0

@radubogdan私は 'between'メソッドをここで直接使用していないので、' must_be'メソッドに渡しています。シンボルである。 –

+0

あなたは正しいですが、まだ間に1つの引数しか渡していませんか? – radubogdan

答えて

0

must_beのように見えますが、あなたが直接主張する使用している場合は何infect_an_assertion :assert_operator, :must_be

assert_operator

# File lib/minitest/unit.rb, line 299 
def assert_operator o1, op, o2, msg = nil 
    msg = message(msg) { "Expected #{mu_pp(o1)} to be #{op} #{mu_pp(o2)}" } 
    assert o1.__send__(op, o2), msg 
end 

として実装されていますか?

例:私must_be方法の背後にあるコードの一部を示すためradubogdanする

class DateTest < ActiveSupport::TestCase 
    test "using assert with between? should work" do 
    a = 5.seconds.ago 

    assert a.between?(10.seconds.ago, Time.zone.now) 
    end 
end 
+0

はい、私はただアサートを直接使うことができますが、それはMinitest仕様を持つ目的を破ります。 'must_be'は、一般的なメソッドではなく、演算子メソッドで使用するように設計されているので、1つの引数を持つことしかできません。 –

+0

それは正しいです:)私はソースコードを読んで、私はそれが複数の引数を持つメソッドで動作するとは思わない。 – radubogdan

0

感謝。

_(language_edit.curation_date).must_be :>, 10.seconds.ago 

、これの副作用は、それがブール1を取る方法か、引数なしで動作ではなく、複数の引数を取る方法と、:このような事業者で使用するように設計されているように見えます。私はこれをすると思います:

_(language_edit.curation_date.between?(10.seconds.ago, Time.zone.now)).must_equal true 
関連する問題