मुझे झूठी सकारात्मकता मिल रही है कि यह परीक्षण करने का प्रयास कर रहा है कि कक्षा में एक निश्चित कस्टमवेन्ट भेजा गया था। मैं यह जांचने के लिए jest.spyOn का उपयोग कर रहा हूं कि dispatchEvent कॉल के माध्यम से कौन सा विशिष्ट CustomEvent पारित किया गया था। यहां वह फ़ंक्शन है जो एक कस्टम ईवेंट भेजता है:

someFunction() {
    this.dispatchEvent(
        new CustomEvent('myEvent', {
            bubbles: true,
            composed: true,
            detail: { someProperty: this.localProperty },
        })
    );
}

और परीक्षण इस तरह से अपेक्षित घटना को मान्य करने का प्रयास करता है:

let container;

beforeEach(() => {
    container = new SomeClass();
});


it('dispatches correct CustomEvent when someFunction is called', () => {
    const dispatchEventSpy = jest.spyOn(container, 'dispatchEvent');
    container.localProperty = '123';
    const customEvent = new CustomEvent('myEvent', {
        bubbles: true,
        composed: true,
        detail: { someProperty: 'wrong value' },
    });
    container.someFunction();
    // TODO: I expect the below to fail because the format passed in the custom event does not match the format in the container.
    expect(dispatchEventSpy).toHaveBeenCalledWith(customEvent);
    // If I use toBe instead and check the argument passed to dispatchEvent this way it fails even when they are the same. So I either get a false positive or a false negative.
    expect(dispatchEventSpy.mock.calls[0][0]).toBe(customEvent);
});
3
davidethell 11 नवम्बर 2020, 13:34

1 उत्तर

सबसे बढ़िया उत्तर

यदि आप इस ऑब्जेक्ट को जेस्ट यूनिट टेस्ट के अंदर लॉग करते हैं तो आप देखेंगे कि परिणाम बहुत समान है:

console.log(new CustomEvent("myEvent", {
   bubbles: true,
   composed: true,
   detail: { someProperty: "123" },
}));
console.log(new CustomEvent("myEvent", {
  bubbles: true,
  composed: true,
  detail: { someProperty: "error" },
}));

मेरे मामले में दोनों के लिए परिणाम था: { isTrusted: [Getter] }

और इसीलिए यह विफल नहीं होगा:

expect(dispatchEventSpy).toHaveBeenCalledWith(customEvent);

आप बेहतर अभिकथन के लिए अपेक्षित वस्तु तक पहुंच सकते हैं dispatchEventSpy.mock.calls[0][0]:

  expect(dispatchEventSpy.mock.calls[0][0].detail).toEqual({
    someProperty: "123",
  });
  expect(dispatchEventSpy.mock.calls[0][0].bubbles).toEqual(true);
  expect(dispatchEventSpy.mock.calls[0][0].composed).toEqual(true);
2
lissettdm 11 नवम्बर 2020, 14:05