用Mocha设置TypeScript单元测试



我正在尝试组织一个新的typescript项目,该项目具有单元测试,也是用TS编写的,在Mocha测试运行程序中运行。

我的项目与以下目录约定:

/project/src/             for server-side code (java)
/project/test/            server's tests
/project/resources/       client-side code (typescript)
/project/test-resources/  typescript tests. 

现在,我在resources/many/levels/Schema.ts的typescript文件中有一个typescript模块Schema

我在一个typescript文件中为mocha测试运行程序编写了它的测试:测试资源/数量/级别/schemaTest.ts

问题是typescript编译器无法使用以下导入语法找到模式模块:

TC2307找不到模块架构

schemaTest.ts(版本1):

/// <reference path="../typings/mocha/mocha.d.ts" />
/// <reference path="../typings/chai/chai.d.ts" />
/// <reference path="../../../resources/many/levels/schema.ts" />
import s = require('schema');

schemaTest.ts(版本2):

/// <reference path="../typings/mocha/mocha.d.ts" />
/// <reference path="../typings/chai/chai.d.ts" />
/// <reference path="../../../resources/many/levels/schema.ts" />
import {Schema, SchemaFactory} from 'schema';

最后,以下版本进行了编译,但由于模块不在../../..,因此导致运行时错误/resources/many/level,但位于dist目录中

/// <reference path="../typings/mocha/mocha.d.ts" />
/// <reference path="../typings/chai/chai.d.ts" />
/// <reference path="../../../resources/many/levels/schema.ts" />
import {Schema, SchemaFactory} from '../../../resources/many/levels/schema';

schema.ts:

module Schema  {
    export interface Schema {
        getName() : string;
        getColumnByIndex(index : number) : Column;
        getColumnById(id : string) : Column;
        getNumberOfColumns(): number;
    }
    export class SchemaFactory{
        ...
        build() : Schema {...}
    }
}  

我正在将测试和src文件编译到一个dist目录中(这并不理想),并希望从那里运行测试。

我正在使用标志--module commonjs进行编译。

如果重要的话,我正在使用IntelliJ15/WebStorm(并使用它的插件用于mocha、node和tsc)

我的架构模块设置不正确吗?它应该是内部/外部模块吗?我的测试应该在同一个命名空间中吗?

提前感谢!

我在设置jasmine测试时遇到过这些问题,但基本上概念是一样的。这个问题源于这样一个事实,即虽然相对路径引用是根据.ts文件的位置指定的,但当代码编译到dist位置时,不会维护该相对路径引用。以下是我如何克服这个问题的。

  1. 将脚本和规范的编译分为两个不同的任务。我在构建过程中使用了gump任务,但如果你不使用gump,你仍然可以通过单独的tsconfig.json来实现这一点,一个在resources文件夹中用于源代码编译,另一个在sources测试文件夹中用于测试脚本编译。基本上,这将从逻辑上将源代码和测试脚本分离为两个不同的类型脚本项目。

  2. 对于源代码的typescript编译,请使用设置为true的声明编译器选项,以便获得schema.d.ts文件。这个文件将在你的schemaTest.ts中被引用。为了让事情变得超级简单,有一个构建步骤,在编译源代码时,将源代码编译生成的.d.ts和.js文件复制到测试资源文件夹中的特定文件夹中(比如说测试资源/compailedsource)。在这种情况下,compiledsource文件夹将包含schema.d.ts和schema.js文件。

测试脚本(schemests.ts)中的import语句将从compiledsource文件夹导入,如下所示

import {Schema, SchemaFactory} from './compiledsource/schema';

  1. 您的源代码编译和测试脚本编译应该分两步完成,第一步是源代码编译,这样当您的测试脚本编译时,schema.d.ts可以在compiledsource文件夹中使用,当您运行测试时,schema.js可以在compile dsource文件夹中使用

当typescript解释"import"语句时,它将查找.ts或.d.ts文件,并且在将其编译为javascript时需要语句,它将查找.js文件。

最新更新