摩卡测试。从未导出的命名空间导入类

时间:2018-04-13 14:05:33

标签: asp.net unit-testing typescript npm mocha

我需要为 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类?

1 个答案:

答案 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访问。