Ошибки тестирования контроллера RSpec во встроенном ресурсе - PullRequest
0 голосов
/ 18 сентября 2018

Я писал тесты для своего приложения, используя gem респондентов.Вот мои маршруты:

resources :sites do
  resources :pages, shallow: true
end

Блок кода My PagesController:

def create
  respond_with(@page = @site.pages.create(page_params))
end

def find_site
  @site = current_user.sites.find(params[:site_id])
end

И тесты, которые не пройдены:

sign_in_user
let(:user_2) { create(:user) }
let(:site) { create(:site, user: @user) }
let(:page) { create(:page, site: site, user: @user) }

describe 'POST #create' do
  context 'with valid attributes' do
    it 'associates new page with the site' do
      expect { post :create, params: { page: attributes_for(:page), site_id: site } }.to change(site.pages, :count).by(1)
   end

    it 'redirects to show view' do
      post :create, params: { page: attributes_for(:page), site_id: site }
      expect(response).to redirect_to page_path(assigns(:page))
    end
  end

Ошибки следующие:

1) PagesController POST #create with valid attributes associates new page with the site
  Failure/Error: expect { post :create, params: { page: attributes_for(:page), site_id: site } }.to change(site.pages, :count).by(1)
   expected #count to have changed by 1, but was changed by 0
 # ./spec/controllers/pages_controller_spec.rb:37:in `block (4 levels) in <top (required)>'

 2) PagesController POST #create with valid attributes redirects to show view
 Failure/Error: expect(response).to redirect_to page_path(assigns(:page))

 ActionController::UrlGenerationError:
   No route matches {:action=>"show", :controller=>"pages", :id=>nil}, missing required keys: [:id]
 # ./spec/controllers/pages_controller_spec.rb:42:in `block (4 levels) in <top (required)>'

Если я заменил site.pages в первом тесте на Page - это на самом деле работает.

Так что я действительно запутался, как исправить эти тесты и в чем ошибка.


Решено

Проблема была с моим PagesController, метод create должен выглядеть следующим образом

def create
  @page = @site.pages.build(page_params)
  @page.user = current_user
  @page.save
  respond_with(@page)
end

1 Ответ

0 голосов
/ 22 января 2019

Проблема была с моим PagesController, метод create должен выглядеть следующим образом

def create
  @page = @site.pages.build(page_params)
  @page.user = current_user
  @page.save
  respond_with(@page)
end
...