无法在 Grape::API class 中存根 Rails.env

Cannot stub Rails.env inside Grape::API class

我正在尝试对 class 中的任何内容进行存根:

module V1
    class API < Grape::API    
      use V1::Middleware::ApiLogger if Rails.env.production?

及之后的规范:

allow(Rails).to receive(:env).and_return(double(production?: true))

allow(Rails.env).to receive(:production?).and_return(true)

allow(Rails).to receive(:env) { "production".inquiry }

expect do
  get "/api/v1/profiles/#{profile_alex.id}"
end.to change(ApiLog, :count).by 1

什么都不起作用,即使在 API class 中存根实例方法也不起作用

有人遇到过同样的问题吗?

我找到问题了。

这与 Grape 预加载 API class 的方式有关,它使用在代码加载时运行的装载方法,并且存根在条件之后 运行,因此检查对于环境,应进入中间件方法。