2015-07-20 186 views
2

我正在寫使用ES6我的項目,我使用bubel + browserify編譯我js文件,到目前爲止,一切都很正常,測試與摩卡和browserify

在我一飲而盡文件我加用摩卡一個測試套件,像這樣:

gulp.task('buildTestsIndividually', function(done) { 
    gutil.log('buildTestsIndividually started'); 
    glob('./test/**/*.spec.js', function(err, files) { 
     gutil.log('files'+files.length); 
     if(err) done(err); 

     var tasks = files.map(function(entry) { 
      return browserify({ entries: [entry] }) 
       .transform(babelify) 
       .bundle() 
       .pipe(source(entry)) 
       .pipe(rename({ 
        extname: '.bundle.js' 
       })) 
       .pipe(gulp.dest(bundledTestsFolder)); 
      }); 
     es.merge(tasks).on('end', done); 
    }); 
    gutil.log('buildTestsIndividually completed'); 
}); 

所以我想單元測試我的一些代碼,問題是,我的項目是使用一種稱爲froala插件,而且好像摩卡無法加載插件。

我不斷收到此錯誤:

TypeError: this.$el.editable is not a function 
      at Array.map (native) 

請注意,我的生產ENV是複製粘貼的上述和插件,沒有任何問題運行那裏。

任何幫助將非常感謝!

+0

您正在導入您的應用程序,植根於您的spec文件。你是否100%確定你的spec文件在其依賴關係的某個地方有正確的'froala'?不相關,但你爲什麼要按照規範構建一個捆綁包? – loganfsmyth

+0

@loganfsmyth謝謝,我發現問題並提出了一些解決方法,請參閱下面的答案 –

+0

但是,爲什麼您需要將每個測試分別捆綁在一起?通常情況下,你會製作一個包含所有內容的包。 – loganfsmyth

回答

0

好吧,我發現這個問題: 自上一口任務分別運行的每個文件(包括所有它的依賴),但所有的睾丸是在同一個瀏覽器實例中運行的副作用是jQuery的加載多次並且每次都覆蓋以前的jQuery實例,因此某些測試的插件被覆蓋。

解決方案(3個選項):

  1. 確保每個測試具有完全相同延伸的jQuery
  2. 首先收集所有的依賴關係(有一整套)相同的插件,然後運行所有測試(可以超過分別殺死)
  3. 運行的每個測試(需要找到一種方法,用一口自動執行)

我希望這可以幫助任何人,乾杯!