使用应该匹配器使用 RSPEC 测试我的控制器时发生错误,特别是创建我无法测试保存功能
Posted
技术标签:
【中文标题】使用应该匹配器使用 RSPEC 测试我的控制器时发生错误,特别是创建我无法测试保存功能【英文标题】:Error occuring in testing my controller with RSPEC using shoulda matchers especially create i can't able to test save functionality 【发布时间】:2021-12-24 20:17:49 【问题描述】:我正在使用 shoulda 匹配器使用 RSPEC 测试我的控制器,而我在控制器中遇到了 create 方法,如果我尝试这样做,我无法测试保存功能,我会出错
预期的响应是 ,但实际上是 我已经附上了我的控制器部分和测试和路由
测试中
RSpec.describe "routes for home", type: :routing do
describe 'post #create' do
before do
post :create , params: params
end
context 'when the params are correct' do
let(:params) restaurant: restaurantname: "Buhari" ,location_id: 1
it 'is expected save successfully and redirect_to gridpage' do
expect(assigns[:restaurant].save).to redirect_to(gridurl_path)
end
end
end
end
在控制器中
def create
# render plain: params
@restaurant=Restaurant.new(restaurant_params)
if @restaurant.save
redirect_to gridurl_path
else
render 'index'
end
end
在路线中
post "/home/create", to: "home#create", as: :createurl
get '/home/grid', to: 'home#grid',as: :gridurl
提前谢谢你
【问题讨论】:
【参考方案1】:首先我建议您阅读https://relishapp.com/rspec/rspec-rails/docs/controller-specs 以及其他文档。他们将为您提供一个很好的起点,让您了解如何使用 rspec
测试内容。
当您查看控制器操作时,您对谁在做什么(即assigns[:restaurant]
)不感兴趣-您想查看是否发生重定向,是否将某些内容保存在数据库中等。从调用该端点的用户的视角。用户是否了解所有内部信息?
它应该是这样的:
describe "routes for home", type: :controller do
describe 'post #create' do
context 'when the params are correct' do
let(:params) restaurant: restaurantname: "Buhari" ,location_id: 1
it 'is expected save successfully and redirect_to gridpage' do
post :create, params: params
expect(response).to redirect_to('/home/grid')
end
end
end
end
【讨论】:
以上是关于使用应该匹配器使用 RSPEC 测试我的控制器时发生错误,特别是创建我无法测试保存功能的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Capybara Rspec Matchers 测试演示者?
rspec 使用 draper Decorator 测试视图
SystemStackError - 堆栈级别太深;在 Rspec 测试中,使用acts_as_audited、Rspec、数据库清理器