Как отправить только 1 параметр методом get? - PullRequest
1 голос
/ 07 января 2020

У меня есть контроллер с этим методом индекса (app / controllers / api / v1 / users_controller.rb)

...
  before_action :find_user, only: [:show, :destroy]

  def index
    @users = User.order('created_at DESC')
  end
...

И у меня есть представление (app / view / api / v1 / users / index) . json .jbuilder)

json.array! @users do |user|
  json.id user.id
  json.name user.name
  json.posts user.posts do |post|
    json.id post.id
    json.title post.title
    json.body post.body
  end
end

И когда я запускаю сервер, он работает нормально, после доступа к localhost:3000/api/v1/users он показывает ожидаемый результат. Но когда я запускаю эти тесты RSpe c (spec / controllers / api / v1 / users_controller_spe c .rb)

require 'rails_helper'

RSpec.describe Api::V1::UsersController, type: :controller do
  describe "GET #index" do
    before do
      get :index
    end
    it "returns http success" do
      expect(response).to have_http_status(:success)
    end
  end
end

, я получаю ошибку enter image description here Если я удалить :index из get :index, это дает ту же ошибку, но (с учетом 0, ожидается 1). Почему get :index отправляет 2 параметра, если есть только один, и как я могу переписать этот код, чтобы тест прошел?

Если я переписываю метод индекса, как этот

  def index
    @users = User.order('created_at DESC')
    render json: @users, status: 200 
  end

Тест пройдёт, но в этом случае я не получу нужный мне файл JSON (который я сделал с помощью jbuilder)

Ответы [ 2 ]

1 голос
/ 20 января 2020

Я нашел решение когда-то go. Все, что мне нужно было сделать, это поместить

  gem 'rspec-core', git: 'https://github.com/rspec/rspec-core'
  gem 'rspec-expectations', git: 'https://github.com/rspec/rspec-expectations'
  gem 'rspec-mocks', git: 'https://github.com/rspec/rspec-mocks'
  gem 'rspec-rails', git: 'https://github.com/rspec/rspec-rails'
  gem 'rspec-support', git: 'https://github.com/rspec/rspec-support'
  gem 'rails-controller-testing'

в мой Gemfile.

1 голос
/ 07 января 2020

Вы должны переместить запрос get в свой блок it

try

require 'rails_helper'

RSpec.describe Api::V1::UsersController, type: :controller do
  describe "GET #index" do
    it "returns http success" do
      get :index
      expect(response).to have_http_status(:success)
    end
  end
end

RSpe c документация

...