我正在尝试使用mocha
和基于mjackson/expect
库进行断言的测试来设置一个项目。需要测试的代码是:
// inside src/lib/math.ts
export function sum(a: number, b: number): number {
return a + b;
}
以下是我的测试:
这里是测试内容。
// inside src/tests/math.tests.ts
/// <reference path="../../typings/main/ambient/mocha/mocha.d.ts" />
/// <reference path="../../typings/main/ambient/expect/expect.d.ts" />
import expect from 'expect';
import {sum} from '../lib/math';
describe('sum', () => {
it('should add two numbers', () => {
expect(sum(1, 2)).toEqual(3);
});
});
我能够使用以下命令,使用tsc编译代码:
find src -name *.ts | xargs tsc --declaration --sourceMap --module commonjs --target es5 --listFiles --outDir .
但是当我在项目目录中使用以下命令运行mocha tests
时,我的测试中出现了以下错误:TypeError: expect_1.default is not a function
。当我打开已编译的版本的math.tests.ts
时,我在转换后的代码顶部看到以下行:var expect_1 = require('expect');
,这很好,正如预期的那样。然而,在查看调用expect
的测试内部时,我看到以下行:expect_1.default(math_1.sum(1, 2)).toEqual(3);
现在这行代码似乎有问题。
expect
库被捆绑为ES6模块,expect
函数是模块的默认导出。然而,TypeScript编译器已经将代码发射到我的测试中,试图访问
expect_1
上的default
属性,它是从expect
库导入的。 expect_1
本身是我在测试中需要的默认导出函数,而不是无效的expect_1.default
。需要注意的一点是,如果我修改我的
math.tests.ts
文件,使用旧的require
语法导入expect
,一切正常运行。请帮助我理解我错过了什么。
P.S. 我使用TypeScript 1.8.2和Node v4.3.1。
const expect = require('expect');
是有效的。 - Marcin