Wie zu Spion auf Fenster.scrollTo im Scherz?

Habe ich eine sehr einfache reagieren Komponente mit folgenden Funktionen:

componentDidMount() {
  window.scrollTo(0, 0)
}

Es scheint, dass Sie etwas nicht tun können, wie

window.scrollTo = jest.fn()

auszuspionieren scrollTo Funktion.

Dafür, ich will wissen, was ist der beste Weg, um Spion auf diese Funktion und behaupten, dass es hat in meinen tests.

Dank



3 Replies
  1. 8

    Im Scherz die global-name-space zugegriffen werden muss, indem global nicht window.

    global.scrollTo = jest.fn()
    • Danke es tatsächlich funktionierte, aber ich hatte zu definieren global.scrollTo = jest.fn() sowohl in meiner setupTests.js und meine eigentliche test ansonsten war es undefined. Können Sie mir sagen, warum ist das so?
  2. 0

    Wie Andreas sagte, Sie benötigen, um Zugang scrollTo() über den globalen Namensraum. Aber, um Spion auf Sie und machen Aussagen, die Sie benötigen, weisen Sie Ihren spy-Funktion in einer variable aus. So etwas wie dieses:

    const scrollToSpy = jest.fn();
    global.scrollTo = scrollToSpy;
    ...
    expect(scrollToSpy).toHaveBeenCalled();
  3. 0

    Ich hatte ein ähnliches problem und nur die Zuordnung der spy hat bei mir nicht funktioniert.

    Schließlich war ich in der Lage, dies funktioniert mit diesem code

    const spyScrollTo = jest.fn();
    Object.defineProperty(global.window, 'scrollTo', { value: spyScrollTo });

    Dann im Scherz, ich war in der Lage, es zu überprüfen, wie diese

    const spyScrollTo = jest.fn();
    
    describe('myComponent', () => {
      beforeEach(() => {
        Object.defineProperty(global.window, 'scrollTo', { value: spyScrollTo });
        Object.defineProperty(global.window, 'scrollY', { value: 1 });
        spyScrollTo.mockClear();
      });
    
      it('calls window.scrollTo', () => {
        myComponent();
        expect(spyScrollTo).toHaveBeenCalledWith({
          top: 1,
          behavior: 'smooth',
        });
      });
    });

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.