Il est plutôt difficile de trouver de la documentation sur Mocha, alors j'ai peur d'être totalement en mer ici. J'ai trouvé un problème avec les méthodes de remplacement qui transmettent des arguments. Ainsi, par exemple, si je mis en place une classe comme ceci:Erreur étrange lors de la tentative de tester la méthode avec l'argument dans Mocha. Est-ce un bug ou est-ce moi?
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
Oui, il est artificiel, mais il est une simplification de l'idée que vous pouvez avoir une méthode que vous ne voulez pas appelé dans le test.
donc je pourrais écrire un test tel que:
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
Maintenant, j'attendre que cela passe. Mais au lieu que je reçois ce message d'erreur plutôt Arcane:
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'
Cela ne signifie absolument rien pour moi, autre que quelque chose de profond dans les couches profondes mochas vient de passer clang. Si j'écris le même type de test sans passer à la seconde méthode, je n'ai aucun problème. Est-ce que je manque quelque chose?