我正在尝试使用proxyquire模拟一个表达行为,并且在处理以下命令时遇到了一些麻烦:

expressProxy = () => {
      return {
        use: () => true,
        post: () => true,
        listen: () => true
      }
    }

Application = proxyquire('./../app', {
      'express': expressProxy,
      'passport': passportProxy,
      './app/business/service/StrategyFactory': StrategyFactoryProxy
    })


当我使用以下代码启动应用程序时:

Application.main()


我总是表现出完整的行为,因为它通常可以正常工作。

我拥有完整而完整的express对象,就好像它没有被重新定义一样。

我有点迷茫,我不明白这里发生了什么。

有什么信息可以帮助我理解吗?

最佳答案

默认情况下,proxyquire将所有方法调用传递到原始依赖项。
如果要针对特定​​存根禁用它,可以使用“ @noCallThru”将其关闭:

var foo = proxyquire('./foo', {
  path: {
      extname: function (file) { ... }
    , '@noCallThru': true
  }
});


.noCallThru()(如果要为所有存根将其关闭):

// all stubs resolved by proxyquireStrict will not call through by default
var proxyquireStrict = require('proxyquire').noCallThru();


参见https://github.com/thlorenz/proxyquire#preventing-call-thru-to-original-dependency获得完整说明

10-04 18:46