2014-06-09 62 views
1

我正在尝试使用minitest(使用rails 4.1.1 & ruby​​ 2.0)。对于下面的规格,我得到一个错误:Minitest on Rails 4&Ruby 2 - 让'assert_not'工作

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)>' 

我的dev &测试宝石文件有以下几点:

gem 'minitest-rails', '~> 2.0.1' 
    gem 'minitest', '~> 5.3.4' 

顺便说一句,我刚刚升级到2.1.2红宝石无济于事。

如果可用,请与我分享明确的文档,介绍如何使用minitest设置导轨4。

+0

立足我的问题on Rails的测试指南(http://guides.rubyonrails.org/testing.html),下**可用断言3.4节**,那就是:'assert_not(试验,[味精] )' - 确保测试是错误的。 – user1322092

回答

-1

刚刚发现assert_not只能内部ActiveSupport::TestCase当您使用规格是不存在

0

中的ActiveSupport :: TestCase的,则添加assert_not方法,并没有出现在香草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 
+0

你如何回应? https://github.com/rails/rails/issues/15598 – user1322092

+0

@ user1322092这取决于Post是什么,以及为那种类型注册了哪些spec_types。如果使用'minitest-rails'并且'Post'是一个ActiveRecord对象,那么它将起作用。查看[register_spec_type](register_spec_type)获取更多信息。 – blowmage