失败的测试期望
Failed test expectation
我的应用程序中有一个购物车控制器
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::Associations::CollectionProxy [],同时,我调查产品的 ID 在每次测试时都在增加 attempt.At没有扎实的想法是错误的
创建的 cart
的 id
未分配给您 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
更新:
控制器中的 find
需要 session[:cart_id]
值,但您的测试没有向控制器请求提供此数据。如果您使用上述代码之一,测试请求会向控制器提供会话。
我的应用程序中有一个购物车控制器
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::Associations::CollectionProxy [],同时,我调查产品的 ID 在每次测试时都在增加 attempt.At没有扎实的想法是错误的
创建的 cart
的 id
未分配给您 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
更新:
控制器中的 find
需要 session[:cart_id]
值,但您的测试没有向控制器请求提供此数据。如果您使用上述代码之一,测试请求会向控制器提供会话。