失败/错误:使用Rspec发布#create testing
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了失败/错误:使用Rspec发布#create testing相关的知识,希望对你有一定的参考价值。
我是Rspec的新手并且测试一般我在stores_controller_spec.rb
文件中有这个代码
require 'rails_helper'
RSpec.describe StoresController, type: :controller do
let(:vendor) { FactoryBot.create(:vendor) }
let(:auth_headers) { vendor.create_new_auth_token }
let(:city) { FactoryBot.create(:city) }
let(:store) { FactoryBot.create(:store, vendor_id: vendor.id, city_id: city.id) }
before(:example) do
request.headers.merge!(auth_headers)
end
describe "Post#create" do
it 'creates a new store' do
post :create, params: { store: attributes_for(:store) }
expect(Store.count).to eq(1)
end
end
end
和factories/store.rb
文件:
FactoryBot.define do
factory :store do
long Faker::Number.positive
lat Faker::Number.positive
store_name Faker::Name.name
telephone_number Faker::Number.number(10)
end
end
和factories/city.rb
文件:
FactoryBot.define do
factory :city do
city_name Faker::Name.name
end
end
在运行测试后,我得到了这个:
Failures:
1) StoresController Post#create creates a new store
Failure/Error: expect(Store.count).to eq(1)
expected: 1
got: 0
和StoresContoller.rb
:
class StoresController < ApplicationController
before_action :authenticate_vendor!
def create
@store = Store.new(store_params)
if @store.save
render json: @store, status: :created, location: @store
else
render json: @store.errors, status: :unprocessable_entity
end
end
private
def store_params
params.require(:store).permit(:vendor_id, :city_id, :store_name, :long, :lat, :telephone_number)
end
end
我应该提到Store
belongs_to :city
和belongs_to :vendor
,当我在expect(store).to be_valid
线后测试同一块上的post :create
时,测试通过了!
你能解释一下我做错了什么吗?
答案
我相信您不需要在请求中的密钥params
下传递商店属性。更改此行,看看它是否有效:
post :create, { store: attributes_for(:store).merge(city_id: city.id, vendor_id: vendor.id) }
您的工厂:store
也不会在没有更改的情况下创建有效记录:
FactoryBot.define do
factory :store do
...
association :city
association :vendor
end
end
以上是关于失败/错误:使用Rspec发布#create testing的主要内容,如果未能解决你的问题,请参考以下文章
失败/错误:需要'rspec/rails'类型错误:错误的参数类型类(预期模块)Rspec V3