Как правильно тестировать анонимный контроллер, если в теме блока задано действие запроса - PullRequest
0 голосов
/ 27 декабря 2018

Тестирую ресурсный контроллер.Для этого я создал в тесте анонимный контроллер.

У меня есть следующий тест rspec:

describe '#destroy' do
    before { allow(controller).to receive(:custom_actions_path).and_return('/') }
    subject { delete :destroy, params: { id: post.id, locale: user.language }}

    it 'delete resource' do
      expect { Post }.to change(Post, :count).by(-1)
    end 

    it 'instant variables are exist' do
      assigns(:resource).should_not be_nil
    end

    it { expect(response).to redirect_to('/') }

    it { expect(response.code).to eq '302' }
  end
end

Тесты всегда падают:

1) ResourceController::Crudify#destroy delete resource
     Failure/Error: expect { Post }.to change(Post, :count).by(-1)
       expected `Post.count` to have changed by -1, but was changed by 0
     # ./spec/unit/controllers/concerns/resource_controller/crudify_spec.rb:162:in `block (3 levels) in <top (required)>'
     # ./spec/rails_helper.rb:47:in `block (3 levels) in <top (required)>'
     # ./spec/rails_helper.rb:46:in `block (2 levels) in <top (required)>'

  2) ResourceController::Crudify#destroy instant variables are exist
     Failure/Error: assigns(:resource).should_not be_nil

       expected: not nil
            got: nil

Как правильно тестировать метод уничтожить, если запроск действию уничтожить я передаю в блок тему?Спасибо

1 Ответ

0 голосов
/ 27 декабря 2018

В некоторых случаях вы должны вызывать subject явно.Запомните первый пример: он должен быть передан блоку, чтобы RSpec мог реально оценить состояние до и после.

describe '#destroy' do
    before { allow(controller).to receive(:custom_actions_path).and_return('/') }
    subject { delete :destroy, params: { id: post.id, locale: user.language }}

    it 'deletes resource' do
      expect { subject }.to change(Post, :count).by(1)
    end 
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...