我正在关注敏捷书,但我无法让我的单元测试正常运行。问题是在此期间创建了两个对象rake test:functionals
而不是一个。我已经确定了原因,但我无法解决问题。
以下是相关代码:
class CartsController < ApplicationController
def create
@cart = Cart.new(params[:cart])
session[:cart_id] = @cart.id
respond_to do |format|
if @cart.save
format.html { redirect_to @cart }
format.json { render json: @cart, status: :created, location: @cart }
else
format.html { render action: "new" }
format.json { render json: @cart.errors, status: :unprocessable_entity }
end
end
endnormal
当它重定向到@cart 时,它会调用 application_controller,其中包含以下代码:
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :the_cart
private
def the_cart
@cart = current_cart
end
def current_cart
Cart.find(session[:cart_id])
rescue ActiveRecord::RecordNotFound
cart = Cart.create
session[:cart_id] = cart.id
cart
end
normal 在开发环境中,当 session[:cart_id] 已经有购物车时,current_cart 不会再创建另一个购物车。但在测试环境中,只需运行 Cart.find(session[:cart_id]) 就会创建一个新的调用新的购物车项目。我该如何解决这个问题,以便 .find 不会每次都为测试环境创建一个新对象?
编辑:这是失败的测试
test "should create cart" do
Rails::logger.debug "CREATING CART"
Rails::logger.debug Cart.all.to_a
assert_difference('Cart.count') do
post :create, cart: { }
Rails::logger.debug Cart.all.to_a
end
assert_redirected_to cart_path(assigns(:cart))
end