jest not implemented window.alert()

前端 未结 3 518
春和景丽
春和景丽 2021-01-03 18:50

i have written test for my api with jest . i added function that calls my api in test file as below:

import AuthManager from \"../Client/Modules/Auth/AuthMan         


        
3条回答
  •  慢半拍i
    慢半拍i (楼主)
    2021-01-03 18:58

    The default test environment for Jest is a browser-like environment provided by jsdom.

    jsdom implements most of what an actual browser would provide (including the global window object), but it doesn't implement everything.

    Specifically for this case, jsdom does not implement window.alert, and instead throws an Error when it is called as can be seen in the source code here.


    As long as you know why your code is launching the alert and know that your test is working properly aside from the Error then you can suppress the Error by providing an empty implementation for window.alert:

    test("login api resolves true", () => {
      const jsdomAlert = window.alert;  // remember the jsdom alert
      window.alert = () => {};  // provide an empty implementation for window.alert
      return expect(AuthManager.login("test", "test")).resolves.toMatchObject(
        expect.objectContaining({
          accessToken: expect.any(String),
          email: expect.any(String),
          expiresIn: expect.any(Number),
          refreshToken: expect.any(String),
          userFullName: expect.any(String),
          userId: expect.any(Number)
        })
      );  // SUCCESS
      window.alert = jsdomAlert;  // restore the jsdom alert
    });
    

提交回复
热议问题