Pergunta

Alguém pode sugerir uma maneira melhor de fazer uma fábrica de utilizar um modelo pré-construído instância por sua associação? Por exemplo, de modo que seria possível abaixo para definir uma criança da fábrica de mensagem para que uma chamada para Factory(:my_message) poderia substituir Factory(:message,:sender=>@me)?

Às vezes o hash de configuração é mais envolvido do que neste artificial exemplo, ou é apenas repetido em tantos testes que parece melhor para empurrá-lo para dentro da fábrica.

Uma alternativa que eu posso pensar é definir um método de teste helper tais como create_message_owned_by(@me), mas eu estou esperando há uma maneira em si factory_girl.

fábricas factory_girl:

Factory.define :sender do |s|
  sender.name "Dummy name"
end

Factory.define :message do |msg|
  msg.text "Dummy text"
  msg.association :sender
end

Factory.define :my_message, :parent=>:message do |msg|
  msg.text "Dummy text"
  ### ? what goes here for msg.association :sender ? ###
end

MessagesControllerTest trecho (usando shoulda):

context "on GET /messages" do
  setup do
    @me = Factory(:sender)
    @my_message = Factory(:message,:sender=>@me)
    @somebody_elses_message = Factory(:message)
    sign_in_as(@me)
    get :index
  end
  should "only assign my messages" do
    assert_contains(assigns(:messages), @my_message)
    assert_does_not_contain(assigns(:messages), @somebody_elses_message)
  end
end
Foi útil?

Solução

Eu não sei se é isso que você está procurando, mas se você primeiro criar a mensagem que você pode buscar o remetente por isso e atribuí-la a @me.

@my_message = Factory(:message)
@me = @my_message.sender

Será que isso ajuda em tudo?

Outras dicas

Ignorando por um minuto o problema de criar uma dependência claro, o exemplo acima pode ser tratada com as novas chamadas de retorno em FactoryGirl 1.2.3. Há agora after_build e after_create retornos de chamada, de modo que você pode executar operações em objetos criados depois que eles já existem no banco de dados (e ter uma id para agarrar, etc).

Veja também esta questão e este fio da lista factory_girl de discussão

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top