2010-07-15 4 views

Répondre

0

Je pense que vous voulez:

l = lambda {} 
B.expects(:new).with(l) 
A.new(&l) 

Je sais que cela fonctionne avec RSpec, je serais surpris si Mocha ne gère pas

+0

Ne fonctionne pas. Je commence à croire que je ne peux pas faire cela de cette façon. Je vais essayer une autre approche ici. Merci! :) – rafaelss

2

J'ai essayé avec les deux Mocha et RSpec et bien que je pouvais obtenir un test de passage, le comportement était incorrect. De mes expériences, je conclus qu'il n'est pas possible de vérifier qu'un bloc est passé. Question: Pourquoi voulez-vous passer un bloc en tant que paramètre? À quoi servira le bloc? Quand devrait-il être appelé?

Peut-être que ce qui est vraiment le comportement que vous devriez tester avec quelque chose comme:

class BlockParamTest < Test::Unit::TestCase 

    def test_block_passed_during_initialization_works_like_a_champ 
    l = lambda {|name| puts "Hello #{name}"} 
    l.expects(:call).with("Bryan") 
    A.new(&l) 
    end 

end 
0

est B::new céder au bloc et le bloc ne modifie un param qui fournit yield? Si oui, alors vous pouvez le tester de cette façon:

require 'minitest/autorun' 
require 'mocha/setup' 

describe 'A' do 

    describe '::new' do 

    it 'passes the block to B' do 
     params = {} 
     block = lambda {|p| p[:key] = :value } 
     B.expects(:new).yields(params) 

     A.new(&block) 

     params[:key].must_equal :value 
    end 

    end 

end 
Questions connexes