使用Mocha和Typescript模拟依赖关系

时间:2016-06-24 15:29:35

标签: node.js typescript mocha

我有一个使用mocha的打字稿项目。假设我们有两个模块如下。

// http.ts
export class Http {
}

// app.ts
import Http from './http';

export class App {

}

我在测试应用程序时如何模拟Http模块?

测试通过npm脚本执行,如下所示。

"test": "cross-env NODE_ENV=test ./node_modules/mocha/bin/mocha",

mocha选项(mocha.opts)如下所示。

test/setup.ts
--compilers ts:ts-node/register
--compilers tsx:ts-node/register
./src/**/*.spec.ts

2 个答案:

答案 0 :(得分:1)

typescript中的import语句被编译为require。您可以使用proxyquire来模拟测试中的任何依赖项

答案 1 :(得分:0)

ts-mock-imports使您可以控制导入时间并保持类型安全。

app.spec.ts

import * as httpModule from 'http';
import { App } from '../src/app';
import { ImportMock } from 'ts-mock-imports';

const httpMock = ImportMock.mockClass(httpModule, 'Http');

const app = new App(); // App now uses a fake version of the Http class

现在,您可以控制Http模块在测试中的行为。

模拟对get的响应:

httpMock.mock('get', { data: true });

const response = app.makeGetRequest(); // returns { data: true }