Jsdom: window.crypto é indefinido

Criado em 25 set. 2016  ·  13Comentários  ·  Fonte: jsdom/jsdom

estou tentando executar testes usando jsdom e mocha, mas recebo este erro:

ReferenceError: crypto is not defined

A criptografia é realmente definida no jsdom?

feature

Comentários muito úteis

Se você requer que apenas números aleatórios sejam preenchidos, você também pode fazer

var nodeCrypto = require('crypto');
global.crypto = {
    getRandomValues: function(buffer: T) { return nodeCrypto.randomFillSync(buffer);}
};

Nota: Você precisará do Node v10 se quiser que o buffer seja Uint32Array, pois na v8 apenas Uint8Array e Buffer são suportados

Todos 13 comentários

O Web Crypto não está implementado no jsdom, isso é correto. Puxe o pedido de boas-vindas!

Obrigado @domenic : +1:

Acabei de propor o uso de https://github.com/anvilresearch/webcrypto para implementar window.crypto .

Consulte PR # 2283

Se alguém puder cutucar o mantenedor (correto), eu ficaria muito grato.

Acabei de adicionar o seguinte ao meu jest.setup.js

crypto = require('@trust/webcrypto')

isso funciona por agora

Se você requer que apenas números aleatórios sejam preenchidos, você também pode fazer

var nodeCrypto = require('crypto');
global.crypto = {
    getRandomValues: function(buffer: T) { return nodeCrypto.randomFillSync(buffer);}
};

Nota: Você precisará do Node v10 se quiser que o buffer seja Uint32Array, pois na v8 apenas Uint8Array e Buffer são suportados

Algum plano para resolver este?

Acabei de adicionar o seguinte ao meu jest.setup.js

crypto = require('@trust/webcrypto')

Observe que @trust/webcrypto não é mais mantido.
Veja anvil.io .

algum avanço aqui? eu tenho o mesmo problema agora

Podemos simular módulos não implementados em JSDOM. Documentação do Jest .
Existem poucos pacotes npm por aí que fornecem implementação para objetos criptográficos .

Usei @peculiar/webcrypto na brincadeira setupFiles

// jest.setup.js
import { Crypto } from "@peculiar/webcrypto"

global.crypto = new Crypto()

Parece estar funcionando bem.

  1. npm i @trust/webcrypto
  2. Coloque window.crypto = require('@trust/webcrypto');
    na parte superior de _jest.setup.js_ ou _setupTests.js (create-react-app) _

Isso ainda não está funcionando para mim, continuo recebendo o erro:

For security reasons, `window.crypto` is required to run `auth0-spa-js`

Eu adicionei as seguintes opções de configuração em package.json:

"jest": {
    "moduleFileExtensions": [
      "js",
      "ts",
      "tsx"
    ],
    "rootDir": "src",
    "testRegex": "\\.test\\.tsx?$",
    "transform": {
      "^.+\\.tsx?$": "ts-jest"
    },
    "testEnvironment": "jsdom",
    "setupFiles": [
      "<rootDir>/lib/test/jest.setup.js"
    ],
  },

jest.setup.js

window.crypto = require('@trust/webcrypto')
Esta página foi útil?
0 / 5 - 0 avaliações