任何人都可以建议一个更好的方法来做一个工厂使用一个预先建立的模型 实例对其关联?例如,这样就有可能 下文定义的儿童的信息的工厂这样一个呼叫 Factory(:my_message) 可能的替代品 Factory(:message,:sender=>@me) ?

有时候安装的哈比在这做作 例,或只是重复所以许多试验,这似乎更好地推动它进入工厂。

一个替代我能想到的是界定测试的辅助方法 如 create_message_owned_by(@me), 但我希望有一种方法内的factory_girl本身。

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摘录(使用应该):

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
有帮助吗?

解决方案

我不知道如果这是你在寻找什么,但是如果你第一次创建信息可以获取发送方通过,并将其分配给 @me.

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

这是否有帮助?

其他提示

忽略一分钟的问题,创造一个不明确的依赖性,上述例子可能是处理与新的回调在FactoryGirl1.2.3.现在有 after_buildafter_create 回调,这样就可以执行的操作上创建的对象之后已经存在的数据库(和有身份证,以抓住,等等)。

也参看 这个问题这个线程 从factory_girl的邮件列表。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top