我试图使用minitest(使用rails 4.1.1& ruby 2.0)。对于以下规范,我收到了错误:
it "is invalid when phone number too short" do
@contact.phone = "123456789"
assert_not @contact.valid?
end
1) Error:
Contact#test_0009_is invalid when phone number too short:
NoMethodError: undefined method `assert_not' for #<#<Class:0x007f8d6ac14608>:0x007f8d6b843488>
test/models/contact_test.rb:32:in `block (2 levels) in <top (required)>'
我的开发&amp;测试gem文件有以下几点:
gem 'minitest-rails', '~> 2.0.1'
gem 'minitest', '~> 5.3.4'
顺便说一句,我刚刚升级到ruby 2.1.2无济于事。
如果可以,请与我分享有关使用minitest设置rails 4的明确文档。
答案 0 :(得分:0)
assert_not
方法添加在ActiveSupport :: TestCase中,并且不存在于vanilla Minitest测试中。您的测试很可能不使用ActiveSupport :: TestCase。最简单的检查方法是在测试中添加以下行:
assert_includes self.class.ancestors, ActiveSupport::TestCase
接下来的问题是为什么。我不知道你的测试的其余部分是什么样的,所以我不能肯定地说。无论您传递给describe
方法的是什么,都与ActiveSupport :: TestCase不匹配。 minitest-rails 2.0中的新功能是将可选的第二个参数匹配到describe
。因此,确保ActiveSupport :: TestCase提供:model
。
describe "I'm not sure what you are doing here", :model do
it "is invalid when phone number too short" do
@contact.phone = "123456789"
assert_not @contact.valid?
end
end
答案 1 :(得分:-1)
刚发现assert_not
仅在ActiveSupport::TestCase
内可用,当您使用Spec它不存在时