使用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)
我做错了什么?
答案 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