坚持这一个。
我正在使用laravel elxir和tsify生成我的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
答案 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
模块中的函数返回的字符串。