2010-05-31 2 views
0

Достаточно сложно найти документацию на Mocha, так что, боюсь, я здесь полностью в море. Я нашел проблему с методами stubbing, которые передают аргументы. Так, например, если я создал класс вроде этого:Странная ошибка при попытке тестирования метода с аргументом в Mocha. Это ошибка или это я?

class Red 
    def gets(*args) 
    @input.gets(*args) 
    end 
    def puts(*args) 
    @output.puts(*args)  
    end 
    def initialize 
    @input = $stdin 
    @output = $stdout 
    end 
    private 
    def first_method 
    input = gets.chomp 
    if input == "test" 
     second_method(input) 
    end 
    end 
    def second_method(value) 
    puts value 
    second_method(value) 
    end 
end 

Да, это надуманное, но это упрощение мысли, что вы можете иметь метод, который вы не хотите, названные в тесте.

Так что я мог бы написать тест, такие как:

setup do 
    @project = Red.new 
    @project.instance_variable_set(:@input, StringIO.new("test\n"))    
    @project.stubs(:second_method) 
end 
should "pass input value to second_method" do 
    @project.expects(:second_method).with("test").once 
    @project.instance_eval {first_method} 
end 

Теперь я ожидаю, что это пройдет. Но вместо этого я получаю сообщение об ошибке, а аркан:

Errno::ENOENT: No such file or directory - getcwd 
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/backtrace_filter.rb:12:in `expand_path' 
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/backtrace_filter.rb:12:in `block in filtered' 
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/backtrace_filter.rb:12:in `reject' 
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/backtrace_filter.rb:12:in `filtered' 
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/expectation_error.rb:10:in `initialize' 
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/mockery.rb:53:in `new' 
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/mockery.rb:53:in `verify' 
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/api.rb:156:in `mocha_verify' 
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/integration/mini_test/version_131_and_above.rb:27:in `run' 

Это абсолютно ничего не значит для меня, кроме чего-то глубоко в недрах мокко только пошла лязг. Если я пишу один и тот же тест, не передавая аргумент второму методу, я не получу никаких проблем. Я что-то упускаю?

ответ

0

Я думаю, что это должно быть что-то, что должно вызвать проблему. Я использую test/unit, и все выглядит нормально.

 
require 'rubygems' 
require "test/unit" 
require 'mocha' 
require File.dirname(__FILE__) + '/../src/red' 

class RedTest < Test::Unit::TestCase 

    def setup 
     @project = Red.new 
     @project.instance_variable_set(:@input, StringIO.new("test\n"))    
     @project.stubs(:second_method) 
    end 


    def test_description_of_thing_being_tested 
     @project.expects(:second_method).with("test").once 
     @project.instance_eval {first_method} 
    end 

end 

дает следующий результат:

 
[email protected]:~/tmp/red/test # ruby red_test.rb 
Loaded suite red_test 
Started 
. 
Finished in 0.000679 seconds. 

1 tests, 1 assertions, 0 failures, 0 errors 
[email protected]:~/tmp/red/test # 
0

Извините - я только видел. Лучше отправлять отчеты об ошибках нам в Lighthouse. Какую документацию вы нашли? Вы видели RDoc on Rubyforge? Какую документацию вы искали, чего не нашли?

Я не смог воспроизвести вашу ошибку. Какая версия Ruby, Rubygems, Shoulda & Mocha Ты использовал?

Вы можете увидеть результаты моего прогона в полевых условиях: this Gist.

 Смежные вопросы

  • Нет связанных вопросов^_^