Странная ошибка при попытке проверить метод с аргументом в Mocha. Это баг или я? - PullRequest
0 голосов
/ 31 мая 2010

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

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'

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

Ответы [ 2 ]

0 голосов
/ 02 декабря 2010

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

Мне не удалось воспроизвести вашу ошибку. Какую версию Ruby, Rubygems, Shoulda & Mocha вы использовали?

Вы можете увидеть результаты моего теста в этом Gist .

0 голосов
/ 31 мая 2010

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

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

дает следующий вывод:

stephen@iolanta:~/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
stephen@iolanta:~/tmp/red/test #  
...