Я пытаюсь настроить проект и запустить тесты с 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.
const expect = require('expect');
работает - person Marcin   schedule 12.09.2016