我如何在 Rails 5 助手规范中模拟 `request.xhr?`?

How would I mock `request.xhr?` in a Rails 5 helper spec?

我正在 rspec 中测试 Rails 5 个助手。我们在帮助程序中有一个块,它包含在条件中:

if request.xhr?
  # do stuff
end

在规范中,我无法强制 request.xhr? 测试为 return true。我试过 allow_any_instance_of(ActionController::Request).to receive(:xhr?).and_return(true),但上面写着 Undefined Constant ActionController::Request(这有点道理)。我也试过 allow(request).to receive(:xhr?).and_return(true) 但那只是默默地失败了。

我如何测试它 - #do stuff 代码是否在我们希望的时候执行,并且它是否符合我们的预期?

答案竟然是allow_any_instance_of(ActionDispatch::Request).to receive(:xhr?).and_return(true)。我错过了 Request 对象已经移出 ActionController 模块并进入 ActionDispatch。