主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ
書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。
2022/08/03
例えば、下のようなコードが合った場合、 jest の toEqual
を使うと、確率で落ちます。
const arr = [];
const mockDbInsert = (elem: number) => {
return new Resolve((resolve) => {
setTimeout(() => {
arr.push(elem);
}, Math.random() * 10);
});
};
const getAllRecords = () => arr;
beforeEach(async () => {
await Promise.all([mockDbInsert(1), mockDbInsert(2), mockDbInsert(3)]);
});
it("two array elements are equals", () => {
expect(getAllRecords()).toEqual([1, 2, 3]);
});
確率で落ちるテストは開発の治安が悪くなってしまうので、なんとかしましょう!ということで、上のようなものを解決する方法です。
やり方は、 jest-extended
を導入して、マッチャーを変更するだけで出来ます。
$ yarn add jest-extended --dev
した後、使用するマッチャーを toEqual
から、 toIncludeSameMembers
に変えるだけ。
it("two array elements are equals", () => {
expect(getAllRecords()).toIncludeSameMembers([1, 2, 3]);
});
これで、順番がランダムに帰ってきたとしても、含まれている要素が一致していれば、テストが通るようになります。
おしまい。