2016-08-29 101 views
2

我很難與Karma不加載特定文件。我是一個關於Karma的初學者,但是我花了整整一天時間潛入文檔並尋找類似的問題而沒有成功。Karma:在相對路徑中找不到模塊

啓動karma進程時,加載配置文件時會失敗。這是錯誤:

Chrome 52.0.2743 (Linux 0.0.0) ERROR 
Uncaught Error: Cannot find module './development' 
at /tmp/node_modules/browser-pack/_prelude.js:1:0 <- /tmp/7b47eeb55cec3f8cc510b5cd637c570a.browserify:1 

我不懷疑該文件是問題本身。我的猜測是這個問題是圍繞'需求'行動。這個文件可能是執行過程中第一個需要的文件。所以Browserify也可能有罪。

文件樹:

. 
├── karma.conf.js 
├── LICENSE 
├── package.json 
├── README.md 
└── src 
    ├── config 
    │   ├── base.js 
    │   ├── development.js 
    │   ├── index.js 
    │   └── production.js 
    ├── controllers 
    │   ├── authentication.js 
    │   └── __test__ 
    │    └── authentication.test.js 
    ├── modules 
    │   └── auth 
    │    ├── builder.js 
    │    └── __test__ 
    │     └── mocks 
    │      └── builder.mock.js 
    ├── router.js 
    └── server.js 

karma.conf.js

'use strict'; 
module.exports = function(config) { 

    config.set({ 

    basePath: '', 
    frameworks: ['mocha', 'sinon-chai', 'browserify'], 
    files: [ 
     'src/**/*.test.js' 
    ], 
    exclude: [ 
    ], 
    preprocessors: { 
     'src/**/*.test.js': ['browserify'] 
    }, 
    reporters: ['progress', 'mocha'], 
    browserify: { 
     debug: true, 
     transform: [ 
     ['babelify',{ 
      presets: ['es2015'], 
     }] 
     ] 
    }, 
    port: 9876, 
    colors: true, 
    logLevel: config.LOG_DEBUG, 
    autoWatch: true, 
    browsers: ['Chrome'], 
    singleRun: false, 
    concurrency: Infinity 
    }) 
} 

在SRC失敗/配置/ index.js

'use strict'; 

const env = process.env.NODE_ENV || 'development'; 
const config = require('./' + env); 

module.exports = config; 

爲了給你們一個方法重現它,我建立了一個小節點應用程序: https://github.com/slecorvaisier/karma-starterkit

開始:

npm run test 

版本:節點-V:V6.2.0 NPM -v:3.8.9

非常感謝您的任何幫助。

回答

1

我認爲這個問題來自於你對變量的require的使用,這在browserify中是不支持的。

而是寫的:

const env = process.env.NODE_ENV || 'development'; 
const config = require('./' + env); 

嘗試:

const config = process.env.NODE_ENV === "production" ? require('./production') : require('./development'); 

的規則是,你不能使用任何變量裏面需要。

另見Why can I not use a variable as parameter in the require() function of node.js (browserify)?

+0

我解決了我的問題,並在您的46秒後發佈了我自己的答案,所以我沒有看到它。但是當你釘住它時,我會接受你的答案。謝謝您的幫助 ! – stilec

0

這裏是解決方案:

爲Browserify不執行代碼本身,「ENV」值永遠不會被取代。 參見:https://github.com/substack/node-browserify/issues/377

對我的解決方法是修改配置文件爲以下(SRC /配置/ index.js): 「使用嚴格」;

const env = process.env.NODE_ENV || 'development'; 
let config = require('./development'); 

if (env === 'production') config = require('./production'); 

module.exports = config; 

,因爲我有「名單」的所有ENV,但測試正在正常工作這是不是最好的解決方案。對我來說,一個明確的解決辦法是打開webpack來更好地處理這種情況。

相關問題