Неопределенный метод 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) }
Оба решения сделают тесты успешными.