Неопределенный метод get? для 302: целое число

Мне нравится обновлять версию ruby ​​с 2.4.2 в 2.5.0 в моем приложении рельсы.

Все спецификации / тесты не пройдены, когда я использую турболинки. Есть ли известная проблема с турболинками и рубином 2.5.0?

Вот вывод на терминал.

Failure/Error: expect(request).to redirect_to company_salesmen_path(salesman.company)

NoMethodError:
    undefined method `get?' for 302:Integer
  # /Users/dennish/.rvm/gems/ruby-2.5.0/gems/turbolinks-5.1.0/lib/turbolinks/assertions.rb:37:in `turbolinks_request?'
  # /Users/dennish/.rvm/gems/ruby-2.5.0/gems/turbolinks-5.1.0/lib/turbolinks/assertions.rb:6:in `assert_redirected_to'
  # ./spec/requests/salesmen_spec.rb:206:in `block (3 levels) in <top (required)>'

Это спецификация:

describe 'DELETE /salesman/:id' do
  subject(:request) do
    delete salesman_path(salesman), headers: auth_headers
  end

  let!(:salesman) { create :salesman }

  it 'destroys salesman' do
    expect { request }.to change { Salesman.count }.by(-1)
  end

  it 'redirects to index' do
    expect(request).to redirect_to company_salesmen_path(salesman.company)
  end
end

2 ответа

Решение

У меня была такая же проблема, похоже, проблема совместимости с Turbolinks 5.1 и Rails 5.0.x. Переход на Turbolinks 5.0.1 решил это за меня.

Основная причина этой ошибки:

subject(:request)

Назначив :requestмы перезаписываем внутренности рельсов - следовательно, он ломается, и тесты терпят неудачу.

Решение

Просто оставьте значение по умолчанию (без имени)

subject { delete salesman_path(salesman) }

Или вы можете переименовать тему:

subject(:http_request) { delete salesman_path(salesman) }

Оба решения сделают тесты успешными.

Переименовав request в http_request решает это.

Другие вопросы по тегам