代理和功能导入

时间:2016-09-05 13:11:43

标签: javascript node.js unit-testing

我试图使用proxyquire模拟快速行为,我在处理以下命令时遇到了一些麻烦:

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

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

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

Application.main()

我总是有完整的表达行为,因为它通常应该有效。

我拥有完整而完整的快速对象,就像它没有被重新定义一样......

我有点失落,我不明白这里发生了什么。

任何可以帮助我理解的信息?

1 个答案:

答案 0 :(得分:1)

默认情况下,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