2010-07-15 20 views
5

que tienen un escenario más o menos asímétodos Mock que recibe un bloque como parámetro

class A 
    def initialize(&block) 
    b = B.new(&block) 
    end 
end 

Soy la clase de pruebas de unidad A y quiero saber si B # nuevo es recibir el bloque pasado a A # nuevo. Estoy usando Mocha como marco simulado.

¿Es posible?

Respuesta

0

Creo que desee:

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

Sé que esto funciona con RSpec, Me sorprendería si Mocha no maneja

+0

No funcionó. Estoy empezando a creer que no puedo hacer eso de esta manera. Voy a probar otro enfoque aquí. ¡Gracias! :) – rafaelss

2

He intentado esto con tanto Mocha y RSpec y aunque pudiera obtener una prueba de aprobación, el comportamiento fue incorrecto. De mis experimentos, concluyo que no es posible verificar que se pase un bloque.

Pregunta: ¿Por qué quiere pasar un bloque como parámetro? ¿Para qué sirve el bloque? ¿Cuándo debería llamarse?

Tal vez esto es realmente el comportamiento que se debe a prueba con algo como:

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

Es B::new cediendo al bloque y el bloque no modificar un parámetro que proporciona yield? En caso afirmativo, puede probarlo de esta manera:

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 
Cuestiones relacionadas