gpt4 book ai didi

jestjs - Jest Expected 和 receive 是一样的

转载 作者:行者123 更新时间:2023-12-05 02:28:52 27 4
gpt4 key购买 nike

当两者看起来完全相同时,Jest 会认为这是不相同的,这是有原因的吗?

所以这是我用来做测试的代码,它基本上只是一个调用事件发射器的函数,在事件发射器中,如果日期无效,我就让它保持原样:

  const datepickerComponent: Datepicker = new Datepicker();

const mockEvent = {
target: {
classList: {
remove: jest.fn(),
add: jest.fn(),
},
value: '01-01-197',
},
} as unknown as InputEvent;

datepickerComponent.onInput(mockEvent);

const emitMock: jest.Mock = jest.fn();
datepickerComponent.dsdDatepickerInputChange = { emit: emitMock } as unknown as EventEmitter<dsdDatepickerInputChangeEvent>;

// when
datepickerComponent.onInput(mockEvent);

const dateValue = new Date('197-01-01T00:00:00');

// then
expect(emitMock).toHaveBeenCalledWith({ value: '197-01-01', valueAsDate: dateValue });

enter image description here

最佳答案

您观察到此错误的原因是因为虽然 Date { NaN } 值看起来相同,但它们实际上引用不同的对象实例并且无法遍历相等性任何更进一步,因此实际错误应该如下:

Expected: {"value": "197-01-01", "valueAsDate": Date { NaN }}
Received: serializes to the same string

(要重现此错误 - 使用 new Date('197-01-01T00:00:00') 创建两个新日期并将它们传递到 .equals())

要克服此错误,您只需将 .toHaveBeenCalledWith 测试重构为以下内容即可:

const calledWithArg = emitMock.mock.calls[0][0];
expect(JSON.stringify(calledWithArg)).toEqual(JSON.stringify({ value: '197-01-01', valueAsDate: dateValue }));

.toHaveBeenCalledWith 不起作用的原因是它不允许我们在比较之前 reshape 参数对象(在我们的例子中我们需要字符串化它) ,因此我们可以选择通过 .mock.calls[0][0] 提取调用 mock 的参数,stringify 然后将其与 预期对象的字符串化版本。

关于jestjs - Jest Expected 和 receive 是一样的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72480274/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com