2016-08-08 14 views
1

私はAngular2(rc4)とWebpackを使用してElectronアプリを開発しています。ユニットテストはカルマと一緒に走った。Electronが必要なAngular2サービスのユニットテスト

import { remote } from 'electron'; 

@Injectable() 
export class SettingsService { 
    main = remote.require('./main.js'); 
    settings: any; 
    constructor() { 
     this.settings = this.main.getSettings(); 
    } 
} 

私は、このファイルのためのユニットテストを書きたい、カルマのランナーは、このエラーがスローされます。

私はこの方法でそれを含んでいる電子プロセスと通信サービスを、持っています

Error: Cannot find module "electron" 
    at webpack:///src/app/services/settings.service.ts:9:0 <- spec-bundle.js:88524 

私はターゲットを追加した場合:「電子レンダラ」をwebpack.test.jsの設定ファイルに、エラーの変化へ:

ReferenceError: Can't find variable: require 
at webpack:/external%20%22electron%22:1:0 <- spec-bundle.js:83860 

これは私のwebpack.test.jsファイルです:

const helpers = require('./helpers'); 

module.exports = { 
    devtool: 'inline-source-map', 

    resolve: { 
    extensions: ['', '.ts', '.js'] 
    }, 

    module: { 
    loaders: [ 
     { 
     test: /\.ts$/, 
     loader: 'ts' 
     }, 
     { 
     test: /\.html$/, 
     loader: 'html' 

     }, 
     { 
     test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)$/, 
     loader: 'null' 
     }, 
     { 
     test: /\.css$/, 
     loader: 'null' 
     } 
    ], 

    postLoaders: [ 

     { 
     test: /\.(js|ts)$/, loader: 'istanbul-instrumenter-loader', 
     include: helpers.root('src'), 
     exclude: [ 
      /\.(e2e|spec)\.ts$/, 
      /node_modules/ 
     ] 
     } 
    ] 
    }, 
    target:'electron-renderer' 
} 

質問がある:私は電子プロセスと通信Angular2コンポーネントのユニットテストを実行するにはどうすればよいです。

答えて

0

カルマ電子を使用することです。

karma.conf.jsは、ブラウザとして電子を使用するように変更する必要があります。

var webpackConfig = require('./webpack.test'); 

module.exports = function (config) { 
    var _config = { 
     basePath: '', 

     frameworks: ['jasmine'], 

     files: [{ pattern: './spec-bundle.js', watched: false }], 

     preprocessors: { './spec-bundle.js': ['electron', 'coverage', 'webpack', 'sourcemap'] }, 

     webpack: webpackConfig, 

     coverageReporter: { 
      dir: '../coverage/', 
      reporters: [ 
       { 
        type: 'text-summary', 
        type: 'json', 
        type: 'html', 
       } 
      ] 
     }, 

     webpackMiddleware: { 
      stats: 'errors-only' 
     }, 

     webpackServer: { 
      noInfo: true 
     }, 

     reporters: ['spec', 'coverage'], 
     port: 9876, 
     colors: true, 
     logLevel: config.LOG_INFO, 
     autoWatch: false, 
     browsers: ['Electron'], 
     singleRun: true, 

     client: { 
      useIframe: false 
     } 
    }; 

    config.set(_config); 
}; 

しかし、これはまだエラーがスローされます。

Uncaught ReferenceError: exports is not defined 
at <appath>/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:32 

これは既にジャスミン・コアで解決されますjasmine-npmにはまだありません(参照:https://github.com/jasmine/jasmine/issues/1144

)nasの新しいnpmバージョンがリリースされるまでの回避策は、npmの代わりに直接githubリンクを使用することですpackage.jsonのパッケージバージョン:

"devDependencies": { 
    .... 
    "jasmine-core": "https://github.com/jasmine/jasmine.git", 
    .... 
} 
関連する問題