estou tentando executar testes usando jsdom e mocha, mas recebo este erro:
ReferenceError: crypto is not defined
A criptografia é realmente definida no jsdom?
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.
npm i @trust/webcrypto
window.crypto = require('@trust/webcrypto');
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')
Comentários muito úteis
Se você requer que apenas números aleatórios sejam preenchidos, você também pode fazer
Nota: Você precisará do Node v10 se quiser que o buffer seja Uint32Array, pois na v8 apenas Uint8Array e Buffer são suportados