2016-11-24 61 views
1

這是我的carts_controller.rb。默認情況下,控制器動作添加使add.js.erb在/ app /視圖/車/request.formats:[「text/html」]替換爲[「application/javascript」]

class CartsController < ApplicationController 
    def add 
    find_cart_and_product 
    @cart.products << @product 
    CartMailer.product_added(@product).deliver_now 
    end 
end 

和我的測試

describe 'POST #add' do 
    let(:cart_full_of){ create(:cart_with_products) } 
    let(:product){ create(:product) } 
    before do 
    post :add, session: { cart_id: cart_full_of.id }, params: { product_id: product.id} 
    end 
    it { expect(response.status).to eq(200) } 
    it { expect(response.headers["Content-Type"]).to eql("application/javascript"; charset=utf-8")} 
    it { is_expected.to render_template :add } 
    it 'should add current product into cart' do 
    expect(cart_full_of.products).to eq([product]) 
    end 
end 

已經失敗,常見的錯誤的所有測試項目:

Failure/Error: post :add, session: { cart_id: cart_full_of.id }, params: { product_id: product.id} 

ActionController::UnknownFormat: 
    CartsController#add is missing a template for this request format and variant. 

    request.formats: ["text/html"] 
    request.variant: [] 

我認爲預期的請求格式有問題,所以如何強制使用request.formats進行測試渲染:[「application/javascript」] instead [「text/html」]?

回答

0

這對我的作品(Rspec的3):

before :each do 
    request.headers["accept"] = 'application/javascript' 
end