2016-11-24 10 views
0

У меня есть контроллер повозки в мое приложениеFailed тест ожидания

class CartsController < ApplicationController 
    def show 
    @cart = Cart.find(session[:cart_id]) 
    @products = @cart.products 
    end 
end 

и написал тест cartscontroller_spec.rb

RSpec.describe CartsController, type: :controller do 
    describe 'GET #show' do 
    let(:cart_full_of){ create(:cart_with_products, products_count: 3)} 
    before do 
     get :show 
    end 
    it { expect(response.status).to eq(200) } 
    it { expect(response.headers["Content-Type"]).to eql("text/html; charset=utf-8")} 
    it { is_expected.to render_template :show } 
    it 'should be products in current cart' do 
     expect(assigns(:products)).to eq(cart_full_of.products) 
    end 
    end 
end 

Мой factories.rb выглядит такой:

factory(:cart) do |f| 
    f.factory(:cart_with_products) do 
    transient do 
     products_count 5 
    end 
    after(:create) do |cart, evaluator| 
     create_list(:product, evaluator.products_count, carts: [cart]) 
    end 
    end 
end 

factory(:product) do |f| 
    f.name('__product__') 
    f.description('__well-description__') 
    f.price(100500) 
end 

но я получена ошибка:

FCartsController GET #show should be products in current cart 
Failure/Error: expect(assigns(:products)).to eq(cart_full_of.products) 

    expected: #<ActiveRecord::Associations::CollectionProxy [#<Product id: 41, name: "MyProduct", description: "Pro...dDescription", price: 111.0, created_at: "2016-11-24 11:18:43", updated_at: "2016-11-24 11:18:43">]> 
     got: #<ActiveRecord::Associations::CollectionProxy []> 

Похоже, у меня нет никаких созданных продуктов из-за пустого массива модели продукта ActiveRecord :: Ассоциации :: CollectionProxy [], одновременно, я исследую идентификатор продукта, увеличивается с каждой попыткой тестирования. На данный момент у меня нет твердые идеи, которые являются неправильными

ответ

0

id созданных cart не назначен на сеанс вашего get :show.

before do 
    session[:cart_id] = cart_full_of.id 
    get :show 
end 

# or 

before do 
    get :show, session: { cart_id: cart_full_of.id } 
end 

UPDATE:

Ваш find в контроллере нужно значение session[:cart_id], но ваш тест не дал эти данные в запросе контроллера. Если вы используете один из кодов выше тестового запроса, он предоставляет сеанс контроллеру.

+0

Отлично! Я переписал get: show, session: {cart_id: cart_full_of.id} , и он выстрелил, но можете ли вы объяснить, почему ваша работа связана? –