2016-03-07 53 views
3

我目前正在使用Karma + Jasmine在基於TypeScript的項目上運行測試,並且當TypeScript編譯在業力監視模式下失敗時,我想'中斷測試'。TypeScript編譯失敗和Karma測試執行?

我使用標準的Karma配置並使用webpack預處理器(編譯TS文件)編譯TS。一切正常,除了在編譯錯誤發生時看到所有的測試通過都是極具誤導性的(即使webpack編譯失敗,karma重新運行以前的測試)。

這似乎相當平凡,但在查看文檔和搜索Google一兩個小時後,我拼命尋找解決方案,而我沒有找到。

是否有涉及業力,茉莉花,webpack和TypeScript的解決方案,可以打破測試編譯錯誤發生時不破壞手錶模式?

編輯:添加了手錶模式的精度。

+0

如果沒有看到配置文件,很難說任何具體的東西,最好是看到一些非常簡單的孤立項目 – ciekawy

+0

事實上,問題不是「我的配置是否合適」,而是「是否有可能?如果是,你是如何用類似的堆棧在你的項目上做的?「。 –

回答

2

個人我並沒有在單一工作流中使用karma和webpack。但要記住從一些關於將它們一起使用的研究,包括打字稿,以及您可能面臨的問題https://github.com/webpack/karma-webpack/issues/49https://github.com/webpack/webpack/issues/708。因此,如提到的bail選項沒有按預期工作,您可以嘗試使用提到的插件,這將在TS錯誤上失敗(引用this comment to issue #708的建議)。

UPDATE:對於watch情況下,我會考慮的變化,防止從的WebPack失敗,但同時提高了誤差,並防止因緣從執行測試以及(在此基礎上suggestion)。

module.exports = function (config) { 

    config.set({ 

    browsers: [ 'Chrome' ], 
    frameworks: [ 'mocha' ], 
    reporters: [ 'mocha' ], 

    files: [ 
     // ... 
    ], 

    // ... 
    webpack: { 
     plugins: [ 
      function() 
      { 
       this.plugin("done", function(stats) 
       { 
        // Log each of the errors 
        stats.compilation.errors.forEach(function (error) { 
         console.log(error.message || error); 
        }); 

        // Pretend no assets were generated. This prevents the tests 
        // from running making it clear that there were errors. 
        stats.stats = [{ 
         toJson: function() { 
          return this; 
         }, 
         assets: [] 
        }];      
       }); 
      } 
     ] 
    } 
    }) 

} 

我剛剛檢查添加上述插件相當簡單的項目https://github.com/itajaja/tslib-webpack-starter和測試失敗對於任何TS編譯錯誤。

+0

起初,這看起來相當不錯,但後來我看到手錶模式不是'乾淨地'支持的......編譯錯誤在發生錯誤時消失了。 –

+0

以及您期望在手錶模式中會發生什麼行爲?我知道的通常方式是所有的工作流程(即編譯和測試)都需要通過以啓動手錶模式。那麼如果出現任何新的變化,應該適當地重新檢查。 – ciekawy

+1

就是這樣!頂尖 !您剛發佈的代碼完美工作:發生編譯錯誤時不會運行測試,並且會在控制檯中記錄錯誤。 我只是用「if(stats.compilation.errors.length> 0){」...包裝了「stats.stats = [{...}]」 –

0

我在使用tslint警告時遇到此問題。我所得到的是Compilation failed due to tslint errors。與所有的常規webpack.config.js設置

bail: true, 

這正好在一起:在webpack.config.js添加該設置照顧了它。例如:

{ 
    context: __dirname + "/app", 
    entry: "./entry", 
    output: { 
     path: __dirname + "/dist", 
     filename: "bundle.js" 
    }, 
    bail: true 
} 

現在我至少在失敗之前看到第一個tslint錯誤。

相關問題