【问题标题】:How request spec for 'sharing' function should look like?“共享”功能的请求规范应该是什么样子?
【发布时间】:2021-07-29 10:02:18
【问题描述】:

我在为 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 以及“期望”应该是什么样子

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

任何帮助将不胜感激:)

【问题讨论】:

  • 发布 share_shopping_list_path(shopping_list),参数:{email: 'user2@gmail.com'}。预计将为电子邮件指定的用户创建一个新列表。

标签: ruby-on-rails rspec


【解决方案1】:

我喜欢做的是查看动作并挑选出我想要确保发生的事情,所以我最终会得到你的 sn-p:

- 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

满足您的期望后,您可以考虑扩大测试范围。可能在多种情况下,您希望购物清单无效(添加更多上下文),或者您可能希望检查购物清单是否使用与原始项目相同的商品(添加更多期望)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 2020-01-30
    • 2019-04-03
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    相关资源
    最近更新 更多