angular - 如何在 Angular 应用程序中使用 powerbi-client 依赖项,而不破坏 Jest 测试?

标签 angular jestjs powerbi-embedded

我的目标是使用 powerbi-client在我的 Angular 9 应用程序中。我的 POC 组件运行良好,使用这样的库:

import * as pbi from 'powerbi-client'; // It's installad in package.json

但是,当我使用 jest 运行单元测试时,出现此错误:

TypeError: Cannot read property 'getRandomValues' of undefined

它看起来像这样:
enter image description here

非常欢迎任何帮助🤷🏽‍♂️

我尝试在 angular.json 的脚本部分下添加库,但这没有帮助:
"scripts": [
    "./node_modules/powerbi-client/dist/powerbi.min.js"
],

最佳答案

类似于亚历克斯贝内特的回答,但 global.self无法在我的 jest/typescript/node 版本中引用。我正在使用:

  • jest 版本 24.9.0 (@types/jest v24.0.23) 带有 jest-preset-angular v8.2.1、ts-jest v24.2.0。
  • typescript 3.7.5 (ts-node v8.10.2)
  • @types/node 版本 14.0.24
  • powerbi 客户端:2.11.0

  • 所以我修改了setupJest.ts在我的 Angular 9 应用程序的根目录中添加以下内容:
    const crypto = require('crypto')
    declare var window: Window & typeof globalThis;
    
    Object.defineProperty(window.self, 'crypto', {
      value: {
        getRandomValues: (arr) => crypto.randomBytes(arr.length)
      }
    });
    
    window 的声明是 powerbi-client 如何声明它的逐行副本(在 node_modules/powerbi-client/dist/powerbi.js - 搜索 getRandomValues 然后按照对 window 的引用进行操作)。
    问题似乎源于 jsDom 没有实现来自 window 的所有方法.按:Jest's Documentation

    关于angular - 如何在 Angular 应用程序中使用 powerbi-client 依赖项,而不破坏 Jest 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60392102/

    相关文章:

    angular - 如何让 `ngOnChanges`在 `angular2`工作

    javascript - Jest - 一个函数模拟多个测试文件的文件

    reactjs - Jest 失败 React 16 升级后无法从 'react/lib/React' 找到模块 'ReactShallowRenderer.js'

    excel - 如何在 Power BI 中更改/设置单元格的背景颜色 [基于行]

    html - 浏览器如何解释非标准/自定义 html 标签

    javascript - 在我单击 UI 之前,signInWithPopup Promise 不会执行 .catch。 Angular 和 Firebase

    Angular 2 变化检测因 Electron 而崩溃

    javascript - 如何使用 React 测试库测试 React 组件是否返回 null 或其子级?

    mysql - 我们想要将 PowerBI 连接到托管在外部服务器上的 mysql 数据库

    javascript - PowerBi 使用 JavaScript 嵌入仪表板