2011-05-03 111 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