'sharing' 函数的请求规范应该是什么样子的?
How request spec for 'sharing' function should look like?
我在为 Controller 中的函数编写请求规范时遇到了一些问题。该功能应该让用户与另一个用户共享购物清单。我正在使用 FactoryBot。
class ShoppingListsController < ApplicationController
before_action :authenticate_user!
def share
shopping_list = current_user.shopping_lists.find(params[:id])
user = User.find_by(email: params[:email])
user_list = UserShoppingList.new(user: user, shopping_list: shopping_list)
if user_list.save
flash[:notice] = "Shopping list has been shared"
else
flash[:alert] = "Shopping list has not been shared"
end
redirect_to shopping_lists_path
end
end
股票规格应该是什么样的?我卡在这个阶段了,不知道怎么才能通过这里 shopping_list_id 以及 'expect' 应该是什么样子
require "rails_helper"
RSpec.describe ShoppingListsController, type: :request do
login_user
let (:user) { controller.current_user }
let (:shopping_list) { create :shopping_list, user: user }
describe 'share shopping list' do
it 'let current user share shopping list' do
post share_shopping_list_path, params: {email: 'user2@gmail.com'}
end
任何帮助将不胜感激:)
我喜欢做的是查看操作并挑选出我想要确保发生的事情,所以采用您的代码片段我最终会得到:
- valid shopping list
- shopping list is created for the target user
- shows a success message
- redirects to shopping list index path
- invalid shopping list
- shows a warning message
- redirects to shopping list index path
然后我们可以通过将每个顶级点作为上下文并将每个点置于期望之下来将其转化为 RSpec:
describe 'share shopping list' do
let(:params) { { email: 'user2@gmail.com' } }
# pass route params like id into path helper here
subject { post share_shopping_list_path, params: params }
context 'valid shopping list' do
before do
# set up a valid shopping list
end
it 'shopping list is created for the target user' do
end
it 'shows a success message' do
end
it 'redirects to shopping list index path' do
end
end
context 'invalid shopping list' do
before do
# setup an invalid shopping list
end
it 'shows a warning message' do
end
it 'redirects to shopping list index path'
end
end
end
填满您的期望后,您可以考虑扩大测试范围。也许在多种情况下您希望购物清单无效(添加更多上下文)或者您可能想检查购物清单是否使用与原始相同的项目创建(添加更多期望)。
我在为 Controller 中的函数编写请求规范时遇到了一些问题。该功能应该让用户与另一个用户共享购物清单。我正在使用 FactoryBot。
class ShoppingListsController < ApplicationController
before_action :authenticate_user!
def share
shopping_list = current_user.shopping_lists.find(params[:id])
user = User.find_by(email: params[:email])
user_list = UserShoppingList.new(user: user, shopping_list: shopping_list)
if user_list.save
flash[:notice] = "Shopping list has been shared"
else
flash[:alert] = "Shopping list has not been shared"
end
redirect_to shopping_lists_path
end
end
股票规格应该是什么样的?我卡在这个阶段了,不知道怎么才能通过这里 shopping_list_id 以及 'expect' 应该是什么样子
require "rails_helper"
RSpec.describe ShoppingListsController, type: :request do
login_user
let (:user) { controller.current_user }
let (:shopping_list) { create :shopping_list, user: user }
describe 'share shopping list' do
it 'let current user share shopping list' do
post share_shopping_list_path, params: {email: 'user2@gmail.com'}
end
任何帮助将不胜感激:)
我喜欢做的是查看操作并挑选出我想要确保发生的事情,所以采用您的代码片段我最终会得到:
- valid shopping list
- shopping list is created for the target user
- shows a success message
- redirects to shopping list index path
- invalid shopping list
- shows a warning message
- redirects to shopping list index path
然后我们可以通过将每个顶级点作为上下文并将每个点置于期望之下来将其转化为 RSpec:
describe 'share shopping list' do
let(:params) { { email: 'user2@gmail.com' } }
# pass route params like id into path helper here
subject { post share_shopping_list_path, params: params }
context 'valid shopping list' do
before do
# set up a valid shopping list
end
it 'shopping list is created for the target user' do
end
it 'shows a success message' do
end
it 'redirects to shopping list index path' do
end
end
context 'invalid shopping list' do
before do
# setup an invalid shopping list
end
it 'shows a warning message' do
end
it 'redirects to shopping list index path'
end
end
end
填满您的期望后,您可以考虑扩大测试范围。也许在多种情况下您希望购物清单无效(添加更多上下文)或者您可能想检查购物清单是否使用与原始相同的项目创建(添加更多期望)。