コンテンツにスキップ

関数の引数の一部だけexpectする

最終更新日: 2021-04-02

スプレッド演算子で引き渡した内容の内、一部だけを利用するケースを想定

サンプルコード

検査対象

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
type FooBar = {
    foo: string;
    bar: number;
};

/**
 * `foo` と `bar` しか使われない関数
 * @param arg
 */
export const spreadExample = (arg: FooBar) => {
    return new Promise((resolve) => {
        resolve([arg.foo, arg.bar]);
    });
};

テストコード

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import * as spex from '../spreadExample';

const spiedSpreadExample = jest.spyOn(spex, 'spreadExample');

describe('spreadExample', () => {
    it('example', async () => {
        const test = {
            foo: 'hoge',
            bar: 123,
            baz: true, // 今回の課題となる項目
        };
        // 余計な `baz` が流し込まれているため、
        // 普通に検査しようとすると `baz` が邪魔で上手く行かないケース
        await spex.spreadExample({ ...test });

        expect(spiedSpreadExample).toBeCalled();
        // コールバックで `expect.objectContaining()` を呼ぶことにより
        // 見たい項目だけを検査することが可能(`baz` を見なくて済む
        expect(spiedSpreadExample).toHaveBeenCalledWith(
            expect.objectContaining({
                foo: 'hoge',
                bar: 123,
            })
        );
    });
});