如何将带有两个参数的方法传递给Minitest Spec断言?

时间:2017-04-11 08:00:35

标签: ruby-on-rails minitest

使用Rails中的Minitest Spec我试图检查ActiveSupport::TimeWithZone是否在某个范围内。我想使用between?方法来获取范围的最小值和最大值。以下是我在Minitest Spec中表达的方式:

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

但它给了我这个错误:

  

Minitest :: UnexpectedError:ArgumentError:参数数量错误(1   2)

我做错了什么?

2 个答案:

答案 0 :(得分: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

如果直接使用assert怎么办?

示例:

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

答案 1 :(得分:0)

感谢radubogdan向我展示了must_be方法背后的一些代码。看起来它设计用于像这样的运营商:

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

这样的副作用是它可以使用带有一个或不带参数的布尔方法,但不能使用带有多个参数的方法。我想我应该这样做:

_(language_edit.curation_date.between?(10.seconds.ago, Time.zone.now)).must_equal true