2014-06-09 60 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