2010-05-31 19 views
0

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?

Répondre

0

Je pense que ça doit être quelque chose dans le système qui cause le problème. J'utilise test/unit, et tout semble être OK.

 
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 

donne le résultat suivant:

 
[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

Désolé - Je ne l'ai vu juste cela. Il est préférable de nous soumettre des rapports de bogue au Lighthouse. Quelle documentation avez-vous trouvé? Avez-vous vu le RDoc on Rubyforge? Quel type de documentation recherchiez-vous que vous n'avez pas trouvé?

J'ai été incapable de reproduire votre bogue. Quelle version de Ruby, Rubygems, Shoulda & Mocha utilisiez-vous?

Vous pouvez voir les résultats de l'exécution de votre test au this Gist.