我需要为 Typescript 应用编写单元测试。我使用 Mocha测试框架。 我的网络应用程序中有内部模块(A),那里有B类。
namespace A {
export class B {
constructor() {
}
}
}
我需要为B组写一些单元测试。
/// <reference path="path/A.ts" />
import { expect } from 'chai';
describe('B test', function () {
describe('#constructor()', () => {
it('Should create B with default data', () => {
let b = new A.B();
expect(b.age).to.equal(90);
});
});
});
我用命令开始我的测试:
mocha --watch --recursive path/Tests
但每次在终端我收到错误信息:
ReferenceError: A is not defined
A - 是我的内部模块,我无法导出它。是否有某种方式,如何测试内部模块的B类?
答案 0 :(得分:2)
无法从JavaScript中的本地范围访问变量。基本上这是同样的问题:
(() => {
let bar = 1;
})();
// bar cannot be reached from this scope
需要对类进行重构才能访问:
export namespace A {
export class B {
constructor() {
}
}
}
此时namespace
在这里没用,可以省略它,只支持ES模块。
出于可测试性原因导出所有内容是一种很好的做法。如果某个类被视为内部类,则会从定义它的.ts
文件中导出,但不会从index.ts
导出。
/** @internal */
JSDoc annotation and stripInternal
compilation option可用于从.d.ts声明中排除这些导出。它们不会作为常规导入使用,但仍可通过require
访问。