在browserify因子包中使用proxyquire

时间:2016-09-05 10:02:41

标签: javascript typescript browserify tsify factor-bundle

坚持这一个。

我正在使用laravel elxirtsify生成我的js。我通过factor-bundle运行typescript来将常见的js模块拆分成一个单独的文件。我不认为在这种情况下会出现问题,因为所有内容都在spec.js

spec.ts

argv[1][1]

factory-widget / index.ts

/// <reference path="../../../typings/index.d.ts" />
import "jasmine-jquery";
// @start widgets
import "./widgets/common/widget-factory/test";

工厂插件/ test.ts

export class WidgetFactory {
 .... this contains a require call to browser.service which i need to mock
}

浏览器的service.ts

...
import {WidgetFactory} from "./index";
const proxyRequire =  require("proxyquire");

  it("should output the factory items", ()=> {

        proxyRequire('./widgets/browser.service/index',{
            "@global": true,
   });
}

在第262行收到错误... export class BrowserService implements IBrowserService{ //details }

Here is the code ( yeah it's over 20,000 lines )你应该怎么调试这些东西。 _(ツ)_ /¯

我看过Stubbing with proxyquire。我没有屏住呼吸得到这个答案。

编辑:06-09-2016 需要Proxquire来覆盖WidgetFactory类

的引导方法中的require调用

在factory-widget / index.ts中:

Uncaught TypeError: require.resolve is not a function

1 个答案:

答案 0 :(得分:0)

我已在proxyquireify GitHub回购中添加了tsify示例。它基于proxyquireify README.md中的简单example

重要的部分是在require中重新定义proxyquire来调用foo-spec.ts

const proxyquire = require('proxyquireify')(require);
require = function (name) {
    const stubs = {
        './bar': {
            kinder: function () { return 'schokolade'; },
            wunder: function () { return 'wirklich wunderbar'; }
        }
    };
    return proxyquire(name, stubs);
} as NodeRequire;

以及proxyquire中的build.js插件的配置:

browserify()
    .plugin(tsify)
    .plugin(proxyquire.plugin)
    .require(require.resolve('./src/foo-spec.ts'), { entry: true })
    .bundle()
    .pipe(process.stdout);

如果构建bundle.js并在Node.js下运行它,您应该看到写入控制台的消息包含由存根./bar模块中的函数返回的字符串。