【问题标题】:jest: window.print not implemented开玩笑:window.print 未实现
【发布时间】:2020-05-11 12:49:03
【问题描述】:

我开玩笑地做的每一件事,错误都不会修复,并一直显示在下面:

 console.error node_modules/jest-environment-jsdom/node_modules/jsdom/lib/jsdom/virtual-console.js:29
    Error: Not implemented: window.alert
        at module.exports (D:\Docs\Projects\EMM\emm_next\node_modules\jest-environment-jsdom\node_modules\jsdom\lib\jsdom\browser\not-implemented.js:9:17)
        at D:\Docs\Projects\EMM\emm_next\node_modules\jest-environment-jsdom\node_modules\jsdom\lib\jsdom\browser\Window.js:594:7
        at util_ajvSchemaValidator (D:\Docs\Projects\EMM\emm_next\src\utils\commonUtility.ts:1557:5)
        at Object.<anonymous> (D:\Docs\Projects\EMM\emm_next\tests\unit\utils\commonUtility.test.ts:78:30)
        at Object.asyncJestTest (D:\Docs\Projects\EMM\emm_next\node_modules\jest-jasmine2\build\jasmine_async.js:108:37)
        at D:\Docs\Projects\EMM\emm_next\node_modules\jest-jasmine2\build\queue_runner.js:56:12
        at new Promise (<anonymous>)
        at mapper (D:\Docs\Projects\EMM\emm_next\node_modules\jest-jasmine2\build\queue_runner.js:43:19)
        at D:\Docs\Projects\EMM\emm_next\node_modules\jest-jasmine2\build\queue_runner.js:87:41
        at processTicksAndRejections (internal/process/task_queues.js:94:5) undefined

  console.error node_modules/jest-environment-jsdom/node_modules/jsdom/lib/jsdom/virtual-console.js:29
    Error: Not implemented: window.print
        at module.exports (D:\Docs\Projects\EMM\emm_next\node_modules\jest-environment-jsdom\node_modules\jsdom\lib\jsdom\browser\not-implemented.js:9:17)
        at D:\Docs\Projects\EMM\emm_next\node_modules\jest-environment-jsdom\node_modules\jsdom\lib\jsdom\browser\Window.js:594:7
        at Object.<anonymous> (D:\Docs\Projects\EMM\emm_next\tests\unit\utils\commonUtility.test.ts:127:5)
        at Object.asyncJestTest (D:\Docs\Projects\EMM\emm_next\node_modules\jest-jasmine2\build\jasmine_async.js:108:37)
 FAIL  tests/unit/utils/commonUtility.test.ts (6.407s)jest-jasmine2\build\queue_runner.js:56:12
  util_sum

我什至使用了 npm i jsdom,但它并没有解决问题。甚至添加“testEnvironment”:“jsdom” 到 package.json,但问题没有解决。 有没有合适的方法来解决这个问题?

【问题讨论】:

    标签: javascript typescript vue.js jestjs jsdom


    【解决方案1】:

    由于 window.alert、打印和其他几个特定于浏览器的副作用需要手动存根。这最好用 Jest 来完成,这样可以跟踪和清理间谍:

    jest.spyOn(window, 'alert').mockReturnValue();
    jest.spyOn(window, 'print').mockReturnValue();
    function printTheWebPage(){
      window.print();
    }
    describe("print", () => {
      it('should print', function () {
        printTheWebPage();
        expect(window.print).toHaveBeenCalled();
      });
    });
    

    欲了解更多信息,请参阅以下链接:

    https://stackoverflow.com/a/60155951/12666332

    https://jestjs.io/docs/en/mock-function-api#mockfnmockreturnvaluevalue

    https://jestjs.io/docs/en/manual-mocks#mocking-methods-which-are-not-implemented-in-jsdom

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,我是这样解决的:

      在测试每个使用 window.print 的组件时,我添加了这个:

      describe('Test.spec.js', () => {
          let jsdomPrint;
      
          beforeEach(() => {
              jsdomPrint = window.print;
              jest.spyOn(window, 'print').mockImplementation(() => {});
          });
      
          ...
      
          afterEach(() => {
              window.print = jsdomPrint;
          });
      });
      

      【讨论】:

      • 请给我一些代码,以便我弄清楚为什么还会出现这种情况。
      • 这是代表 :github.com/SeyyedKhandon/… 这是测试失败
      猜你喜欢
      • 2019-07-31
      • 1970-01-01
      • 1970-01-01
      • 2020-08-11
      • 2022-07-12
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多