¿Puede el método tropezado RSpec devolver diferentes valores en secuencia?

Tengo una familia modelo con un métodolocation que combina ellocation salidas de otros objetos, Miembros. (Los miembros están asociados con familias, pero eso no es importante aquí.)

Por ejemplo, dado

member_1 tienelocation == 'San Diego (viajando, regresa el 15 de mayo)' member_2 tienelocation == 'San Diego'

Family.location podría devolver 'San Diego (miembro_1 viajando, regresa el 15 de mayo)' Los detalles no son importantes.

Para simplificar la prueba 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 demember, pero simplemente devolver valores diferentes en una secuencia estaría bien. ¿Hay alguna manera de hacer esto en RSpec?

Es posible anular el método Member.location dentro de cada ejemplo de prueba, 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 esta sea 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 de "venenos" ejemplos posteriores.

Entonces, ¿hay alguna manera de hacer que un método con código auxiliar devuelva valores diferentes y especificados en cada llamada?

Respuestas a la pregunta(5)

Su respuesta a la pregunta