2015-11-23 19 views
14

Khi thử nghiệm .js tệp có nhập khẩu Webpack CSS như import './style.css', Mocha ném lỗi cú pháp (vì nó cố nhập và phân tích cú pháp tệp CSS dưới dạng JS). Có một giải pháp cho that has already been posted on Stack Overflow này, nhưng nó chỉ giải quyết nếu bạn chưa sử dụng trình biên dịch với Mocha. Tôi đang sử dụng Babel 5. Tôi đã thử những điều sau đây, nhưng có vẻ như Mocha không hỗ trợ chuyển nhiều trình biên dịch:Xử lý nhập WebPack CSS khi thử nghiệm với Mocha và Babel

// npm test script 

mocha ./src/**/*Test.js --compilers css:./scripts/mocha-webpack-compiler.js js:babel/register 

// scripts/mocha-webpack-compiler.js 

function noop() { 
    return null; 
} 

require.extensions['.css'] = noop; 

Có cách nào để có nhiều trình biên dịch Mocha hay không hay hơn Mocha không cố gắng phân tích cú pháp nhập khẩu Webpack CSS?


EDIT:

Tôi thích giải pháp được đề xuất bởi @Giles B dưới đây; đó là chính xác những gì tôi cần. Tuy nhiên, kể từ khi tôi vẫn còn trên Babel 5 Tôi cần một vài điều chỉnh như hình dưới đây:

mocha.opts

--require scripts/support/babelhook 
--require scripts/support/mocha-webpack-compiler 

scripts/babelhook.js

require('babel/register'); 

scripts/mocha-webpack- compiler.js

function noop() { 
    return null; 
} 
require.extensions['.css'] = noop; 

mocha kịch bản

mocha ./src/**/*Test.js 

Tính năng này hoạt động với tôi bằng cách sử dụng babelbabel-core, cả hai phiên bản 5.8.23.

Trả lời

15

tôi đi qua cùng một vấn đề và chỉ có nó làm việc, vì vậy trong mocha.opts tôi nộp tôi thêm require cuộc gọi sau đây:

--require test/babelhook 
--require test/css-null-compiler 

Trong babelhook.js Tôi có một yêu cầu tuyên bố để tải babel:

// This file is required in mocha.opts 
// The only purpose of this file is to ensure 
// the babel transpiler is activated prior to any 
// test code, and using the same babel options 

require("babel-register")(); 

sau đó, từ liên kết mà bạn provided tôi thiết lập css-null-compiler.js như sau:

// Prevent Mocha from compiling class 
function noop() { 
    return null; 
} 

require.extensions['.css'] = noop; 
require.extensions['.scss'] = noop; 

Hy vọng điều đó sẽ hữu ích.

+0

Cảm ơn bạn - điều này có vẻ chính xác những gì tôi cần. Tuy nhiên, nó không làm việc cho tôi: Tôi nhận được một "SyntaxError: nhập khẩu mã thông báo bất ngờ"; bạn đang sử dụng các mô-đun ES6?Btw, tôi vẫn còn trên Babel 5 (babel 6 có quá nhiều vấn đề hiện tại). Câu hỏi SO có liên quan: http://stackoverflow.com/questions/20049790/how-to-pass-compiler-options-to-mocha – trevordmiller

+0

Tôi đã cập nhật câu hỏi của mình với mã được cập nhật – trevordmiller

+0

Tôi cũng đã thêm tiền thưởng 100 danh tiếng nếu bạn hoặc bất kỳ ai khác có thể giúp tôi làm việc này – trevordmiller

5

Dựa trên câu trả lời @Giles' ở trên, đây là những gì tôi đã sử dụng để làm việc trên Babel 6

package.json

"scripts": { 
    "test": "mocha --compilers js:babel-core/register 
      --require ./tools/testHelper.js 'src/**/*[email protected](js|jsx)'", 

công cụ/testHelper.js

// Prevent mocha from interpreting CSS @import files 
function noop() { 
    return null; 
} 

require.extensions['.css'] = noop; 

Điều này cho phép bạn có các bài kiểm tra bên trong thư mục src cùng với các thành phần của bạn.

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