Ruby on rails 使用工厂女孩工厂进行测试时,如何覆盖:从AASM设置初始状态? 更新

Ruby on rails 使用工厂女孩工厂进行测试时,如何覆盖:从AASM设置初始状态? 更新,ruby-on-rails,testing,factory,factory-bot,aasm,Ruby On Rails,Testing,Factory,Factory Bot,Aasm,回答如下。如果链接站点消失,您可以使用mocha存根初始状态并防止覆盖,如 require 'mocha' class OrderTest < ActiveSupport::TestCase def setup Order.any_instance.stubs(:set_initial_state) @order = Factory(:order, :state => "other_state") end ... end 需要“摩卡” 类OrderTe

回答如下。如果链接站点消失,您可以使用mocha存根初始状态并防止覆盖,如

require 'mocha'
class OrderTest < ActiveSupport::TestCase
  def setup
    Order.any_instance.stubs(:set_initial_state)
    @order = Factory(:order, :state => "other_state")
  end

  ...
end
需要“摩卡”
类OrderTest“其他状态”)
结束
...
结束
原始问题 我目前正在运行Acts As State Machine Rails插件(顺便说一句,它节省了大量的时间),并且在使用Factory Girl时遇到了一些挑战(也很棒)

我希望在使用工厂创建对象时能够设置对象状态。问这个问题的一种通用方法是“当创建带有工厂的对象时,如何调用类方法?”

类传输程序:更新 充当状态机器:初始=>:created,:column=>'status' 国家:已创建 状态:活动 状态:不活动,:之后=>:不活动 结束 工厂定义:运输机do | f| f、 顺序(:公司名称){n}“运输公司{n}” 结束 >>t=工厂(:运输车) => >>t=工厂(:传送机,:状态=>“活动”) =>#如预期,将状态更改回原来的状态 >>激活! =>正确 >>t => 我可以随时打电话给t!方法,但这会使我的测试变得脆弱。我正在寻找一种在工厂创建级别运行此方法或在Factory.rb中设置它的方法


谢谢…

您可以使用模拟框架(mocha)覆盖set_initial_状态并获得对象的正确状态

>> require 'mocha'
=> []
>> Transporter.any_instance.stubs(:set_initial_state)
=> #<Mocha::Expectation:0x21ee6e4 ...
>> t = Factory(:transporter, :state => "active")
=> #<Transporter ... state: "active">
>需要“摩卡”
=> []
>>Transporter.any_instance.stubs(:set_initial_state)
=>#>t=工厂(:传送机,:状态=>“活动”)
=> #

想法从中窃取。

您可以使用模拟框架(mocha)覆盖set_initial_状态并获得对象的正确状态

>> require 'mocha'
=> []
>> Transporter.any_instance.stubs(:set_initial_state)
=> #<Mocha::Expectation:0x21ee6e4 ...
>> t = Factory(:transporter, :state => "active")
=> #<Transporter ... state: "active">
>需要“摩卡”
=> []
>>Transporter.any_instance.stubs(:set_initial_state)
=>#>t=工厂(:传送机,:状态=>“活动”)
=> #

这主意是偷来的。

非常感谢。我在谷歌上搜索了30分钟,却找不到答案。啊!无论如何,谢谢。也许下一个人会更容易通过StackOverflow搜索引擎优化找到它。非常感谢。我在谷歌上搜索了30分钟,却找不到答案。啊!无论如何,谢谢。也许下一个人会更容易通过StackOverflow搜索引擎优化找到它。