6

我喜欢在我的 rails 应用程序中将 ruby​​ 版本从 升级2.4.2到。2.5.0

在我使用 turbolink 的地方,所有规格/测试都失败了。turbolinks 和 ruby​​ 是否存在已知问题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
4

3 回答 3

4

此错误的根本原因是:

subject(:request)

通过分配:request,我们正在覆盖 Rails 内部- 因此它会中断并且测试会异常失败。

解决方案

只需使用默认值(无名称)

subject { delete salesman_path(salesman) }

或者您可以重命名主题

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

这两种解决方案都将使测试成功。

于 2019-07-10T12:41:17.137 回答
3

我遇到了同样的问题,它似乎是与 Turbolinks 5.1 和 Rails 5.0.x 的兼容性问题。降级到 Turbolinks 5.0.1 为我解决了这个问题。

于 2018-04-14T22:07:46.917 回答
3

通过重命名requesttohttp_request可以解决这个问题。

于 2018-11-15T14:43:24.090 回答