Это не столько ошибка, сколько компилятор TypeScript, выполняющий свою работу, однако он приводит к сбою моих сборок Travis.
В моем пакете у меня есть функция completeRound
, которая принимает число как его первый аргумент, затем 3 необязательных аргумента, и, поскольку я написал его на TypeScript, я говорю ему, что ему нужно передать число в качестве первого аргумента:
function completeRound( number: number, rounding = 1, direction = 'closest', offset = 0 ): number {
let n: number = +number,
r: number = Math.abs(+rounding),
d: string = direction,
o: number = +offset;
if (typeof n !== 'number') {
throw new TypeError('You need to round a number!');
}
// Rest of the code goes here
}
Все работает нормально, Единственная проблема - это когда дело касается тестирования. В моем тестовом скрипте есть:
import completeRound from '../src/completeRound';
import { expect } from 'chai';
import 'mocha';
const expectedResults = [
{
testVal : {
number : 3.5,
rounding : 1,
direction : 'down'
},
eR : 3
},
// 40-something different tests, all passing fine
];
expectedResults.map(t => describe(`completeRound(${t.testVal.number}, ${t.testVal.rounding}, '${t.testVal.direction}', ${t.testVal.offset})`,() => {
it(`should return ${t.eR}`, () => {
const result = completeRound(t.testVal.number,t.testVal.rounding,t.testVal.direction,t.testVal.offset);
expect(result).to.equal(t.eR);
});
})); // For testing results where it shouldn't throw an error
/* This one is the problem line */
expect(() => completeRound([5])).to.throw(TypeError, /a number/);
/* ---------------------------- */
expect(() => completeRound(5,1,'arriba')).to.throw(Error, /valid rounding direction/);
Поэтому я передаю ему массив вместо числа, где я хочу, чтобы JavaScript выдавал ошибку TypeError. Очевидно, я хочу, чтобы люди, использующие это либо в JavaScript, либо в TypeScript, были одинаково охвачены. Плюс я ищу эту сладкую 100% цифру в моем отчете о покрытии. НО , из отчета ниже в Travis, мы видим, что компилятор TypeScript добирается туда первым и выдает ошибку компиляции.
TSError: ⨯ Unable to compile TypeScript:
dev/test/completeRound.spec.ts:414:28 - error TS2345: Argument of type 'number[]' is not assignable to parameter of type 'number'.
414 expect(() => completeRound([5])).to.throw(TypeError, /a number/);
Я не вижу способа, которым я может протестировать скомпилированный код, потому что это означает, что я компилирую его, я использую webpack для его компиляции, который сразу же помещает его в мою папку ./dist
, просматривает его и все остальное, поэтому я не вижу, как импортировать из этого , и мне действительно не нужен двухэтапный процесс, в котором я его компилирую , а затем объединяю.
Я думаю, что короткая версия, я хочу протестировать JavaScript выдачу ошибок для ошибка, при которой TypeScript ловит ее автоматически, а JavaScript - нет.
Кто-нибудь может помочь?