未定义的方法“得到?” 302:Integer
undefined method `get?' for 302:Integer
我想在我的 rails 应用程序中将 ruby 版本从 2.4.2
升级到 2.5.0
。
所有 specs/tests 在我使用 turbolinks 的地方都失败了。
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
我遇到了同样的问题,这似乎是与 Turbolinks 5.1 和 Rails 5.0.x 的兼容性问题。降级到 Turbolinks 5.0.1 为我解决了这个问题。
将 request
重命名为 http_request
即可解决此问题。
此错误的根本原因是:
subject(:request)
通过分配 :request
我们是 overwriting rails internals - 因此它中断并且测试奇怪地失败。
解决方案
使用默认值即可 (无名称)
subject { delete salesman_path(salesman) }
或者你可以:
subject(:http_request) { delete salesman_path(salesman) }
两种解决方案都会使测试成功。
我想在我的 rails 应用程序中将 ruby 版本从 2.4.2
升级到 2.5.0
。
所有 specs/tests 在我使用 turbolinks 的地方都失败了。
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
我遇到了同样的问题,这似乎是与 Turbolinks 5.1 和 Rails 5.0.x 的兼容性问题。降级到 Turbolinks 5.0.1 为我解决了这个问题。
将 request
重命名为 http_request
即可解决此问题。
此错误的根本原因是:
subject(:request)
通过分配 :request
我们是 overwriting rails internals - 因此它中断并且测试奇怪地失败。
解决方案
使用默认值即可 (无名称)
subject { delete salesman_path(salesman) }
或者你可以
subject(:http_request) { delete salesman_path(salesman) }
两种解决方案都会使测试成功。