2014-12-22 26 views
9

Sto utilizzando WebPack + React + Jest per la mia applicazione e ho impostato resolve.alias = { app: "/path/to/app" } nel mio file di configurazione.Impossibile utilizzare resol.alias per il test JEST

In React, posso utilizzare questo percorso per richiedere ("app/componente") e ottenere il file in "/path/to/app/component.js" correttamente.

Durante l'esecuzione di test JEST questo alias non viene riconosciuto, né nei test, né per i moduli importati. Tutto questo funziona quando si esegue l'app ma non i test con jest-cli.

risposta

2

jest-cli vive in un mondo separato da Webpack, quindi non può funzionare in questo modo.

Utilizzare babel-plugin-module-resolver per gestire l'aliasing.

+0

[jest-webpack] (https://www.npmjs.com/package/jest-webpack) non sembra essere [mantenuto attivamente] (https://github.com/ColCh/jest-webpack/graphs /contributori). [jest-webpack-alias] (https://www.npmjs.com/package/jest-webpack-alias) vale la pena esaminare. – Hozefa

+0

@Hozefa Grazie. Aggiornato. –

+0

** AGGIORNAMENTO **: i creatori di [jest-webpack-alias] (https://www.npmjs.com/package/jest-webpack-alias) consigliano di utilizzare [babel-plugin-module-resolver] (https://github.com/tleunen/babel-plugin-module-resolver) invece. Ho controllato e funziona benissimo :) – iskuhar

0

Jestpack potrebbe essere di aiuto in quanto consente di eseguire i test dopo che sono stati creati con Webpack.

0

Io uso la moka per testare la reazione, ma penso che funzioni anche per scherzo.

Si dovrebbe usare 2 package: mock-require e proxyquire.

Supponendo di avere un file js come questo:

app.js

import action1 from 'actions/youractions'; 

export function foo() { console.log(action1()) }; 

E il vostro codice di test dovrebbe scrivere in questo modo:

app.test.js

import proxyquire from 'proxyquire'; 
import mockrequire from 'mock-require'; 

before(() => { 
    // mock the alias path, point to the actual path 
    mockrequire('actions/youractions', 'your/actual/action/path/from/your/test/file'); 
    // or mock with a function 
    mockrequire('actions/youractions', {actionMethod:() => {...})); 

let app; 
beforeEach(() => { 
    app = proxyquire('./app', {}); 
}); 

//test code 
describe('xxx',() => { 
    it('xxxx',() => { 
    ... 
    }); 
}); 

file di alberi

app.js 
    |- test 
    |- app.test.js 

prima finta il percorso alias di mock-richiedono prima funzione e deridono il vostro oggetto di prova da proxyquire nella funzione beforeeach.

Problemi correlati