ruby-on-rails - 工厂女孩将参数传递给 trait

标签 ruby-on-rails factory-bot minitest

我一直在为此头疼。我希望能够覆盖特征之上的属性。我一直在阅读 documentation和一些互联网示例,但我无法让它工作。

这就是我想做的事情:

test "..." do 
 #overwrite start_time
 middle = create( :basic_instant_instance, start: 1.hours.ago)
end 

FactoryGirl.define do

  factory :instant_instance do

  trait :active_now do 
    #attributes...
    transient do
      start nil
    end  
    #overwrite start_time
    start_time start.present? ? start : Time.now
  end

  factory :basic_instant_instance,          traits: [:active_now] 
end   

我不断得到:

ArgumentError: Trait not registered: start

最佳答案

你需要在这里重新考虑一下你的策略 - 你有一个 basic_instant_instance不继承自 instant_instance因此对 trait [:active_now] 或 start 属性一无所知。

您还需要在构建 Factory 实例时评估 start_time,方法是将它放在大括号中。否则,它将在 start 初始化之前进行评估。

尝试类似以下内容:

FactoryGirl.define do

  factory :instant_instance do
    trait :active_now do 
      #attributes...

      transient do
        start nil
      end

      #overwrite start_time
      start_time { start.present? ? start : Time.now }
    end
  end
end

然后像这样调用它:
create( :instant_instance, start: 1.hours.ago, :active_now)

关于ruby-on-rails - 工厂女孩将参数传递给 trait,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40209066/

相关文章:

ruby-on-rails - 哪里用 `FactoryGirl.build_stubbed` 哪里用RSpec的 `mock`/`double`

ruby-on-rails - 你如何使用 Minitest、Capybara、Selenium 执行 javascript 测试?

ruby-on-rails - 如何在 Rails 的 Controller 测试中测试第二个重定向

javascript - 在 Rails 中使用 JSONP 呈现多行 Javascript

android - 状态 422 不可处理的实体删除 Android 客户端中的 json 请求

ruby-on-rails - Rails 跨 Controller 的单例对象清除

ruby-on-rails - Factory Girl after_build 回调并覆盖 rspec 中的问题

ruby-on-rails - 如何在 Rails 中以字符串格式显示 png 图像?

ruby-on-rails - 如何为具有 has_one/belongs_to 关系的模型创建工厂,这些关系通常被嵌套属性克服?

ruby-on-rails - ruby on Rails-fixture_file_upload 不适用于 CarrierWave 的 Controller 测试