我正在尝试设置项目并使用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
时:
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编译器已将代码发送到我的测试中,它尝试访问default
上的expect_1
属性,该属性是expect
库的导入。 expect_1
引用本身是我在测试中需要的默认导出函数,而不是expect_1.default
无效。
值得注意的是,如果我使用较早的math.tests.ts
语法修改了我的expect
以导入require
。一切正常。
请帮助我理解我所缺少的内容。
P.S。我将TypeScript 1.8.2与Node v4.3.1一起使用。
答案 0 :(得分:3)
看起来npm包中的expect命名空间类型错误(@types/expect)您可以使用小的解决方法来保存类型检查:
import * as _expect from 'expect';
const expect = _expect as any as typeof _expect.default;
答案 1 :(得分:0)
您的期望包版本似乎与其声明不符。我刚刚安装了一个,发现它有一个default
条目:
exports['default'] = expect;
module.exports = exports['default'];
答案 2 :(得分:0)
我遇到了同样的问题并通过更改导入语句来解决
import expect from 'expect';
到
import * as expect from 'expect';
即获取完整的模块,而不仅仅是默认的导出