最小的Rails 4& Ruby 2 - 获取' assert_not'上班

时间:2014-06-09 01:48:46

标签: ruby-on-rails ruby-on-rails-4 minitest

我试图使用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的明确文档。

2 个答案:

答案 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它不存在时