Mocha test. Import class from not exported namespace

依然范特西╮ 提交于 2019-12-24 20:59:51

问题


I need to write unit test for my Typescript app. I use Mocha test framework. I have got internal module(A) in my web app and class B there.

namespace A {
    export class B {
       constructor() {

       }
    } 
}

I need to write some unit test for class 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);
            });

        });
    });

I'm starting my tests with command:

mocha --watch  --recursive  path/Tests

But every time in terminal I receive error message:

ReferenceError: A is not defined

A - is my internal module and I can't to export it. Is it some way, how is it possible to test internal module's class B?


回答1:


There is no way to reach variables from local scopes in JavaScript. Basically this is same problem as:

(() => {
  let bar = 1;
})();
// bar cannot be reached from this scope

The class needs to be refactored to be reachable:

export namespace A {
    export class B {
       constructor() {

       }
    } 
}

At this point namespace is of no use here, it can be omitted in favour of ES modules only.

It is a good practice to export everything for testability reasons. If a class is considered internal, it's exported from .ts file where it was defined but not from index.ts.

/** @internal */ JSDoc annotation and stripInternal compilation option can be used to exclude these exports from .d.ts declarations. They won't be available as regular imports but will still be reachable with require.



来源:https://stackoverflow.com/questions/49818883/mocha-test-import-class-from-not-exported-namespace

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!