test rails bot ruby rspec rspec2

ruby - bot - rspec in rails 5



¿Cómo puedo simular super en ruby usando rspec? (2)

No puedes burlarte de super , y no deberías. Cuando te burlas de algo, estás verificando que se recibe un mensaje en particular, y super no es un mensaje, es una palabra clave.

En cambio, averigüe qué comportamiento de esta clase cambiará si falta la super llamada y escriba un ejemplo que ejerza y ​​verifique ese comportamiento.

Estoy extendiendo una biblioteca existente creando una clase secundaria que se extiende a la clase de biblioteca.

En la clase infantil, pude probar la mayoría de las funciones en el método de initialize , pero no pude simular una super llamada. La clase infantil se parece a algo como abajo.

class Child < SomeLibrary def initialize(arg) validate_arg(arg) do_something super(arg) end def validate_arg(arg) # do the validation end def do_something @setup = true end end

¿Cómo puedo escribir la prueba rspec (con mocha) de manera que pueda simular una super llamada? Tenga en cuenta que estoy probando la funcionalidad del método de initialize en la clase Child . ¿Tengo que crear una ruta de código separada que no llame a super cuando se proporciona un argumento extra?


Una buena manera de probar esto es establecer una expectativa de alguna acción tomada por la superclase - ejemplo:

class Some::Thing < Some def instance_method super end end

y la super clase:

class Some def instance_method another_method end def self.another_method # not private! ''does a thing'' end end

ahora prueba:

describe ''#instance_method'' do it ''appropriately triggers the super class method'' do sawm = Some::Thing.new expect(sawm).to receive(:another_method) sawm.instance_method end end

Todo lo que determina es que a Super se le llamó en la Superclase

La utilidad de este patrón depende de cómo estructure sus pruebas / qué expectativas tiene de la mutación de la clase hijo / derivada mediante el método super que se aplica.

Además, preste mucha atención a class métodos de class e instance , tendrá que ajustar los allows y las expects consecuencia.

YMMV