2011-05-03 50 views
5

我對我的問題有點難過。我使用紅寶石1.8.7,導軌2.3.2。我試圖在測試單元2.3.0中使用'omit'功能。下面是我的測試:在測試單元2.3.0中使用'omit'功能時出錯

def test_create_reward_program 
    omit("Pending") 

    reward_program = RewardProgram.find_by_program_name("test_foo") 
    assert_equal "test_foo", reward_program.program_name 

end 

當我運行「耙測試」,我得到如下:

1) Error: 
test_create_reward_program(AwardControllerTest): 
Test::Unit::OmittedError: Pending 
    /test/functional/award_controller_test.rb:43:in `test_create_reward_program' 


148 tests, 261 assertions, 0 failures, 1 errors, 0 pendings, 0 omissions, 0 notifications 

0%通過

我不知道爲什麼它標記爲'錯誤'應該將其標記爲'遺漏'。有人知道嗎?

我也注意到,這樣做的工作:

def test_create_reward_program 
    omit "Pending" do 
    reward_program = RewardProgram.find_by_program_name("test_foo") 
    assert_equal "test_foo", reward_program.program_name 
    end   
end 

所有的教程和例子,我發現表明,我的第一個例子應該工作。

+0

我有完全一樣的問題,你有沒有找到解決的辦法? – user789148 2011-07-28 09:32:22

+0

你有沒有找到這個解決方案? – 2016-09-21 23:50:20

回答

2

查看Test :: Unit 2.3.0的代碼,這正是編碼行爲。它拋出,除非給出一個塊。

documentation列出了源omit爲:

# File lib/test/unit/omission.rb, line 77 
def omit(message=nil, &block) 
    message ||= "omitted." 
    if block_given? 
    omission = Omission.new(name, filter_backtrace(caller), message) 
    add_omission(omission) 
    else 
    raise OmittedError.new(message) 
    end 
end 

順便說一句,如果你升級,Rails的3.1.0.rc1,關於Ruby 1.9.2p0,它捆綁MINITEST運行,沒有定義omit,但增加了skip。例如:

# test/unit/bird_test.rb 
require 'test_helper' 

class BirdTest < ActiveSupport::TestCase 
    test "creation" do 
    bird = Bird.new 
    assert_not_nil bird 
    end 

    test "not implemented" do 
    skip 
    assert false 
    end 

end 

使用turn寶石漂亮地打印我的輸出,我得到:

$ rake test:units 
Started 

BirdTest: 
    PASS creation (0.06s) 
    SKIP not implemented (0.00s) 

Finished in 0.060828 seconds. 

2 tests, 1 assertions, 0 failures, 0 errors, 1 skips