Tengo un modelo Familia con un método location
que combina las salidas location
de otros objetos, Miembros. (Los miembros están asociados con las familias, pero eso no es importante en este caso.)¿Puede el método resuelto RSpec devolver diferentes valores en secuencia?
Por ejemplo, dada
- member_1 ha
location
== 'San Diego (itinerante, devuelve 15 de mayo)' - member_2 tiene
location
== 'San Diego'
Family.location podría devolver 'San Diego (member_1 viajando, devoluciones 15 de mayo)' Los detalles no son importantes.
Para simplificar las pruebas de Family.location, quiero resguardar Member.location. Sin embargo, necesito que devuelva dos valores diferentes (especificados) como en el ejemplo anterior. Idealmente, estos se basarían en un atributo de member
, pero simplemente devolver valores diferentes en una secuencia estaría bien. ¿Hay alguna manera de hacer esto en RSpec?
Es posible reemplazar el método Member.location dentro de cada ejemplo de ensayo, tales como
it "when residence is the same" do
class Member
def location
return {:residence=>'Home', :work=>'his_work'} if self.male?
return {:residence=>'Home', :work=>'her_work'}
end
end
@family.location[:residence].should == 'Home'
end
pero dudo que esto es una buena práctica. En cualquier caso, cuando RSpec está ejecutando una serie de ejemplos, no restaura la clase original, por lo que este tipo de anulación "envenena" los ejemplos posteriores.
Entonces, ¿hay alguna manera de que un método troquelado devuelva diferentes valores especificados en cada llamada?
Gracias por la consejo – apneadiving
¡Gracias, idlefingers! –
Gracias @idlefingers! ¿Qué pasa si quieres devolver una gran cantidad de valores? –