jak sprawdzić czy dany element dostał klasę

0

Chce napisac test jednostkowy który sprawdza czy hatWrapper dostał odpowiednią klasę.
Niestety otrzymuje taki komunikat:

expect(received).toEqual(expected) // deep equality

   Expected: true
   Received: false

a Moj test wygląda tak:

test("should add class", () => {
    const hat = new Hat(true),
    hatWrapper = document.createElement("div");
    hat.prevAnimationAPosY = 300;
    hat.prevPosY=500;
  
   hat.scrollAnimation(hatWrapper,'400','200')
    window.scrollTo(0, 1000);
    
   expect(hatWrapper.classList.contains('scroll_down')).toEqual(true);
});

moja klasa
https://codepen.io/olivier-mazur/pen/jOZdEQp?editors=1010

0

Strzelam, że window.scrollTo(); nie emituje zdarzenia, jeśli scrolling nie miał rzeczywiście miejsca - spróbuj podnieść wydarzenie ręcznie (w stylu el.dispatchEvent(new CustomEvent('scroll'));).

0
test("should add class", () => {
    const hat = new Hat(true),
    hatWrapper = document.createElement("div");
    hat.prevAnimationAPosY = 300;
    hat.prevPosY=500;
  
   hat.scrollAnimation(hatWrapper,'400','200')
   window.dispatchEvent(new CustomEvent('scroll'));
    
   expect(hatWrapper.classList.contains('scroll_down')).toEqual(true);
});
0

Poczytaj sobie o javascript event loop - tl;dr sprowadza się do: uruchomienie .dispatchEvent() spowoduje odpalenie handlerów podpiętych pod to zdarzenie dopiero w następnej klatce, a nie od razu.

Nie wiem jaki framework do testów wykorzystujesz, ale powinien on mieć jakiś wbudowany mechanizm radzenia sobie z tym.

2

Programowaniem przez permutacje za daleko nie zajedziesz, z tym całym await window.dispatchEvent().

Spróbuj coś w stylu:

function waitForEventLoop() {
  return new Promise(resolve => setImmediate(resolve));
}

test("should add class", async () => {
    const hat = new Hat(true),
    hatWrapper = document.createElement("div");
    hat.prevAnimationAPosY = 300;
    hat.prevPosY = 500;
  
    window.scrollTo(0, 1000);
    await waitForEventLoop(); 
    
    expect(hatWrapper.classList.contains('scroll_down')).toEqual(true);
});

1 użytkowników online, w tym zalogowanych: 0, gości: 1