测试命名空间控制器

问题描述 投票:0回答:1

我正在编写Rails API,并具有命名空间的控制器(和路由)。在尝试为上述控制器编写RSpec测试时,出现错误,并且不确定如何纠正错误。控制器如下:

module Api
  module V1
    class BudgetsController < ApplicationController
      before_action :authenticate_user!
      before_action :set_budget, only: %i[destroy]

      def new
        @budget = current_user.budget.build
        render json: @budget
      end

      def create
        @budget = current_user.budget.build(budget_params)
        if @budget.save
          render json: @budget, status: 200
        else
          render json: { errors: @budget.errors.full_messages }, status: 422
        end
      end

      def destroy
        @budget.destroy
      end

      private

      def set_budget
        @budget = Budget.find(params[:id])
      end

      def budget_params
        params.require(budget).permit(:start_date, :end_date, :income)
      end
    end
  end
end

到目前为止的测试如下:

require 'spec_helper'

RSpec.describe BudgetsController, type: :controller do
  let(:valid_attributes) do
    {
      start_date: "01-03-2020",
      end_date: "31-03-2020",
      income: 7000
    }
  end

  let(:invalid_attributes) do
    {
      start_date: nil,
      end_date: nil,
      income: nil
    }
  end

  describe "GET #index" do
    it "returns a success response" do
      get :index, params: {}
      expect(response).to be_successful
    end
  end
end

仅供参考,路径设置如下:

Rails.application.routes.draw do
  namespace :api do
    namespace :v1 do
      devise_for :users
      resources :users, only: %i[show index]
      resources :budgets
      resources :budget_totals
    end
  end
end

我得到的错误如下:

Failure/Error:
  RSpec.describe BudgetsController, type: :controller do
    let(:valid_attributes) do
      {
        start_date: "01-03-2020",
        end_date: "31-03-2020",
        income: 7000
      }
    end

    let(:invalid_attributes) do

NameError:
  uninitialized constant BudgetsController
# ./spec/controllers/budgets_controller_spec.rb:3:in `<top (required)>'
No examples found.


Finished in 0.00008 seconds (files took 8.51 seconds to load)
0 examples, 0 failures, 1 error occurred outside of examples

PS。控制器位于app / controllers / api / v1文件夹中。

ruby-on-rails ruby api rspec rspec-rails
1个回答
0
投票
RSpec.describe Api::V1::BudgetsController, type: :controller do

建议

您还应该更好地用Request规范覆盖API

有关请求规格的更多信息-https://relishapp.com/rspec/rspec-rails/docs/request-specs/request-spec

尝试一下!

© www.soinside.com 2019 - 2024. All rights reserved.