Спецификация запроса Rspec ActionController :: RoutingError - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь переписать свои тесты в Rspec и застрял при попытке сделать обновление для пользователя. Я уверен, что это глупая вещь, которую я упускаю из виду, но я искал повсюду и не могу найти ответ.

Вот файл myspec:

require 'spec_helper'

describe UsersController, type: [:request, :controller]  do

before(:each) { host! 'localhost:3000/' }

describe "#update" do

it "doesn't update user" do
  form_params = {
    params: {
    id: 1,
    email: "hello@example",
    name: "hello"
    }
  }
  patch :update, params: form_params


    end
  end
end

Кажется, что: часть обновления неверна, но, насколько я вижу в своих маршрутах, другого способа вызвать ее нет.

Вот ошибка:

ActionController::RoutingError: No route matches [PATCH] "/update"

Вот мои маршруты:

       new_user GET    /users/new(.:format)                    users#new
      edit_user GET    /users/:id/edit(.:format)               users#edit
           user GET    /users/:id(.:format)                    users#show
                PATCH  /users/:id(.:format)                    users#update
                PUT    /users/:id(.:format)                    users#update
                DELETE /users/:id(.:format)                    users#destroy

Вот мой старый тест:

  test "should redirect update when not logged in" do
    patch user_path(@user), params: { user: { name: @user.name, email: @user.email } }
    assert_not flash.empty?
    assert_redirected_to login_url
  end

А если вы, ребята, знаете, - как мне преобразовать assert_not flash.empty? в Rspec? Большое спасибо заранее!

1 Ответ

0 голосов
/ 06 мая 2018

Во-первых, вы не можете использовать несколько типов в type: [:request, :controller]. Если вы хотите написать спецификации запроса, вы должны указать именованный маршрут (user_path) или URL ("/ users /: id")

require 'spec_helper'
describe UsersController, type: :request  do
  describe "#update" do
    let(:user) { create :user } # or use fixtures here

    # I'm just a bit confused here, why it should not update?
    it "doesn't update user" do
      patch user_path(user), email: "hello@example", name: "hello"
      expect(flash.empty?).to eq false
      expect(response).to redirect_to login_path
    end
  end
end
...