gpt4 book ai didi

ruby-on-rails - 你如何覆盖 :set_initial_state from AASM when testing with Factory Girl factories?

转载 作者:行者123 更新时间:2023-11-28 21:03:23 27 4
gpt4 key购买 nike

更新

回答如下。万一链接站点消失,您可以使用 mocha stub 初始状态并防止覆盖,如...

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

...
end

原始问题

我目前正在运行 Acts As State Machine Rails Plugin(顺便说一句,这节省了大量时间)并且在与 Factory Girl 一起使用时遇到了一些挑战(也很棒)。

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

class Transporter < ActiveRecord::Base
validates_presence_of :company_name, :on => :update
acts_as_state_machine :initial => :created, :column => 'status'
state :created
state :active
state :inactive, :after => :inactivate_transporter_activity
end

Factory.define :transporter do |f|
f.sequence(:company_name) {|n| "transporter_company#{n}"}
end

>> t=Factory(:transporter)
=> <Transporter ... status: "created">
>> t=Factory(:transporter, :status => 'active')
=> <Transporter ... status: "created"> #as expected, changes state back
>> t.activate!
=> true
>> t
=> <Transporter ... status: "active">

我总是可以调用 t.activate!每个测试中的方法,但这会使我的测试变得脆弱。我正在寻找一种在工厂创建级别运行此方法或在 factory.rb 中设置它的方法。

谢谢...

最佳答案

您可以使用模拟框架 (mocha) 来覆盖 set_initial_state 并获取对象的正确状态。

>> require 'mocha'
=> []
>> Transporter.any_instance.stubs(:set_initial_state)
=> #<Mocha::Expectation:0x21ee6e4 ...
>> t = Factory(:transporter, :state => "active")
=> #<Transporter ... state: "active">

创意来自 here .

关于ruby-on-rails - 你如何覆盖 :set_initial_state from AASM when testing with Factory Girl factories?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1054786/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com