添加Aasm gem后,Rspec-rails测试开始失败。 完成所有基本设置。通过添加aasm_state列进行迁移。向订单模型添加状态。
测试日志:
Searching book Visitor searches books by title
Failure/Error: order = Order.create
ActionView::Template::Error:
undefined method `aasm_state' for #<Order:0x0000000008e48740>
Did you mean? aasm_state=
但是测试中没有订单:
require 'spec_helper'
require 'rails_helper'
feature 'Searching book' do
before do
book = Book.create title: "Geralt"
author = Author.create full_name: "Swiss"
category = Category.create title: "Programming"
category.books << book
book.authors << author
author.books << book
visit books_path
end
scenario 'Visitor searches books by title' do
fill_in 'search', with: "Geralt"
click_button('Search')
expect(page).to have_content 'Geralt'
end
end
也许问题出在应用程序控制器帮助器方法中:
class ApplicationController < ActionController::Base
helper_method :current_order
protect_from_forgery with: :exception
def current_order
if session[:order_id].nil?
order = Order.create
session[:order_id] = order.id
order
else
Order.find(session[:order_id])
end
end
end
带有aasm的Order.rb,部分:
include AASM
aasm do
state :in_progress, initial: true
state :processing
state :in_delivery
state :delivered
state :canceled
end
模板:
= form_tag books_path, method: :get do
.form-group.col-sm-2
= text_field_tag :search, params[:search], class: "form-control", id: "search",placeholder: "Search book"
= submit_tag "Search", class: "btn btn-primary"
= render @books
= "Items in cart #{current_order.order_items.count}"