2016-09-01 6 views
1

Я использую жемчужину асама для обработки переходов состояния в моем проекте. У меня есть простая модель, которая выглядит следующим образом:Тестирование переходов состояния aasm с rspec

class TransferPostingBid < ActiveRecord::Base 
    include AASM 

    aasm :status do 
    state :offered, initial: true 
    state :wait_for_pap_confirmation 
    state :confirmed_by_pap 
    state :retracted_by_pap 

    event :pap_choosed do 
     transitions from: :offered, to: :wait_for_pap_confirmation 
    end 

    event :confirmed_by_pap do 
     transitions from: :wait_for_pap_confirmation, to: :confirmed_by_pap 
    end 

    event :retracted_by_pap do 
     transitions from: :wait_for_pap_confirmation, to: :retracted_by_pap 
    end 
    end 
end 

И я пытаюсь проверить переходы с AASM построен в RSpec matchers:

require 'rails_helper' 

describe TransferPostingBid, type: :model do 
    describe 'state transitions' do 
    let(:transfer_posting_bid) { TransferPostingBid.new } 

    it 'has default state' do 
     expect(transfer_posting_bid).to transition_from(:offered).to(:wait_for_pap_confirmation).on_event(:pap_choosed) 
    end 
    end 
end 

Когда я запускаю эту спецификацию он возвращает меня следующее сообщение об ошибке:

AASM::UnknownStateMachineError: 
    There is no state machine with the name 'default' defined in TransferPostingBid! 

Как это исправить?

ответ

2

Вы можете попробовать использовать метод #on указать, какой конечный автомат вы тестируете:

transition_from(:offered).to(:wait_for_pap_confirmation).on_event(:pap_choosed).on(:status)