これに似たテストケースを考えると:
test(“test”, () => {
[1, 2, ..., 1000000].map(value => {
expect(() => foo(value)).toThrow();
});
})
expectステートメントが失敗した場合にのみトリガーされるブレークポイント(3行目など)を設定する簡単な方法はありますか?
言い換えると、大きな配列の途中の値の1つが原因でテストが失敗し、ほとんどの値が例外条件をトリガーしない場合、ブレークポイントを設定する方法があります。テストは合格ですが、テストが失敗した場合は中断しますか?
これにより、その値に対してテストが失敗する理由を簡単に把握できます。
私はWebStormを使用しているので、Chrome /ノード、コード、またはWebStormでそれを行う方法についての回答に満足しています。
コンパイル時の値がわかっている場合は、値test.each
ごとに一意のテストを作成して、失敗している値を明確に確認できます。
const tests = [[6], [7], [8]];
test.each(tests)(
'%i should be even',
v => {
expect(v % 2).toBe(0);
}
)
...これは、2つのテストが合格(6と8)し、7で失敗して説明メッセージが表示されることを報告します。
● 7 should be even
expect(received).toBe(expected) // Object.is equality
Expected: 0
Received: 1
4 | '%i should be even',
5 | v => {
> 6 | expect(v % 2).toBe(0);
| ^
7 | }
8 | )
at toBe (src/code.test.js:6:19)
テストデータが実行時まで利用できず、アサーションが単純なものである場合は、次のexpect
行に条件付きブレークポイントを設定するだけです。
const generateData = count => {
const data = [];
for (let i = 0; i < count; i++) {
data.push(Math.floor(Math.random() * 10) + 1);
}
return data;
}
test('all values are even', () => {
generateData(1000).map(v => {
expect(v % 2).toBe(0); // <= set breakpoint for v % 2 !== 0
});
})
テストデータが実行時まで利用できず、条件付きブレークポイントを設定するのが難しい場合は、expect
をaでラップしtry / catch
、ブレークポイントをcatch
:に配置できます。
const generateData = count => {
const data = [];
for (let i = 0; i < count; i++) {
data.push(Math.floor(Math.random() * 10) + 1);
}
return data;
}
test('all values are even', () => {
generateData(1000).map(v => {
try {
expect(v % 2).toBe(0);
}
catch (err) {
throw err; // <= set your breakpoint here
}
});
})
expect
ステートメントError
は、アサーションが失敗した場合にをスローすることで機能するため、このアプローチは単にキャッチして再スローしますError
が、失敗した場合にトリガーされるブレークポイントを設定する場所を提供しますexpect
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加