2014-12-22 23 views
9

Tôi đang sử dụng WebPack + React + Jest cho ứng dụng của mình và tôi đã đặt resolve.alias = { app: "/path/to/app" } trong tệp cấu hình của mình.Không thể sử dụng resolve.alias để thử nghiệm JEST

Trong React, tôi có thể sử dụng đường dẫn này để yêu cầu ("app/component") và lấy tệp tại "/path/to/app/component.js" một cách chính xác.

Khi chạy thử nghiệm JEST, bí danh này không được nhận dạng, không phải trong các thử nghiệm, cũng như cho các mô-đun đã nhập. Tất cả điều này hoạt động khi chạy ứng dụng nhưng không hoạt động với các bài kiểm tra với jest-cli.

Trả lời

2

jest-cli sống trong một thế giới riêng biệt với Webpack để nó không thể hoạt động theo cách đó.

Sử dụng babel-plugin-module-resolver để xử lý bí danh.

+0

[jest-webpack] (https://www.npmjs.com/package/jest-webpack) có vẻ không được [chủ động duy trì] (https://github.com/ColCh/jest-webpack/graphs/cộng tác viên). [jest-webpack-alias] (https://www.npmjs.com/package/jest-webpack-alias) đáng để xem xét. – Hozefa

+0

@Hozefa Cảm ơn. Đã cập nhật. –

+0

** CẬP NHẬT **: Người tạo [jest-webpack-alias] (https://www.npmjs.com/package/jest-webpack-alias) khuyên bạn nên sử dụng [babel-plugin-module-resolver] (https://github.com/tleunen/babel-plugin-module-resolver) thay thế. Tôi đã kiểm tra nó và nó hoạt động tuyệt vời :) – iskuhar

0

Jestpack có thể trợ giúp vì nó sẽ cho phép bạn chạy thử nghiệm sau khi đã được xây dựng với Webpack.

0

Tôi sử dụng mocha để kiểm tra phản ứng, nhưng tôi nghĩ nó cũng hoạt động tốt.

Bạn nên sử dụng 2 gói: mock-requireproxyquire.

Giả sử bạn có một file js như thế này:

app.js

import action1 from 'actions/youractions'; 

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

Và mã kiểm tra bạn nên viết như thế này:

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 cây

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

Đầu tiên giả con đường bí danh của mô hình đòi hỏi trước khi chức năng, và nhạo báng đối tượng thử nghiệm của bạn bằng cách proxyquire chức năng beforeEach.

Các vấn đề liên quan