2016-09-14 23 views
4

アプリケーションをrc-7にアップグレードし、ユニットテストを実行して何も壊れていないことを確認した後、ユニットテストの約半分でこのエラーメッセージが表示されました。ZoneAwarePromiseがオーバーライドされました

「エラー

:。Zone.jsはZoneAwarePromise 『(ウィンドウ|グローバル).Promise』のことを検出しました上書きされている 最も可能性の高い原因はZone.js(Polyfilling約束APIは必要ありませんした後、約束のポリフィルがロードされているということですzone.jsがロードされている必要がある場合は、zone.jsをロードする前にnode_modules/zone.js/dist/zone.js(21行目)に "

と考えることができます私は私の単体テストでhttp呼び出しからの応答を、手動でオブザーバを返すことによって模擬するということです。

これは、ユニットテストにJasmineとKarmaを使用するAngular2アプリケーションです。

UPDATE だから、これは私が誤ってそれらをつかんでいない限り、私は判断できそうしかし、私はどこでもpolyfillsをロードしておりません、エラーメッセージあたりとしてロード順序の問題、であると思われます。私はkarma.conf.jsとsystemjs.conf.jsを添付して、エラーを見つけるのを助けました。

Karma.conf.js

module.exports = function(config) { 
    var gulpConfig = require('../gulp/config')(); 

    /** 
    * List of npm packages that imported via `import` syntax 
    */ 
    var dependencies = [ 
    '@angular', 
    'lodash', 
    'rxjs' 
    ]; 

    var configuration = { 
    basePath: '../../', 

    browserNoActivityTimeout: 20000, 
    frameworks: ['jasmine'], 
    browsers: ['PhantomJS'], 
    reporters: ['progress', 'coverage'], 

    preprocessors: {}, 

    // Generate json used for remap-istanbul 
    coverageReporter: { 
     includeAllSources: true, 
     dir: 'coverage/appCoverage/remap/', 
     reporters: [ 
     { type: 'json', subdir: 'report-json' } 
     ] 
    }, 

    files: [ 
     'node_modules/reflect-metadata/Reflect.js', 
     'node_modules/zone.js/dist/zone.js', 
     'node_modules/zone.js/dist/long-stack-trace-zone.js', 
     'node_modules/zone.js/dist/proxy.js', 
     'node_modules/zone.js/dist/sync-test.js', 
     'node_modules/zone.js/dist/jasmine-patch.js', 
     'node_modules/zone.js/dist/async-test.js', 
     'node_modules/zone.js/dist/fake-async-test.js', 

     'node_modules/angular/angular.js', 
     'node_modules/core-js/client/shim.min.js', 
     'node_modules/systemjs/dist/system.src.js' 
    ], 

    // proxied base paths 
    proxies: { 
     // required for component assests fetched by Angular's compiler 
     "/src/": "/base/src/", 
     "/app/": "/base/src/app/", 
     "/node_modules/": "/base/node_modules/" 
    }, 

    port: 9876, 
    colors: true, 
    logLevel: config.LOG_INFO, 
    autoWatch: true, 
    //browserNoActivityTimeout: 100000 
    }; 

    configuration.preprocessors[gulpConfig.tmpApp + '**/!(*.spec)+(.js)'] = ['coverage']; 
    configuration.preprocessors[gulpConfig.tmpApp + '**/*.js'] = ['sourcemap']; 
    configuration.preprocessors[gulpConfig.tmpTest + '**/*.js'] = ['sourcemap']; 

    var files = [ 
    gulpConfig.tmpTest + 'test-helpers/global/**/*.js', 
    gulpConfig.src + 'systemjs.conf.js', 
    'config/test/karma-test-shim.js', 
    createFilePattern(gulpConfig.tmpApp + '**/*.js', { included: false }), 
    createFilePattern(gulpConfig.tmpTest + 'test-helpers/*.js', { included: false }), 
    createFilePattern(gulpConfig.app + '**/*.html', { included: false }), 
    createFilePattern(gulpConfig.app + '**/*.css', { included: false }), 
    createFilePattern(gulpConfig.app + '**/*.ts', { included: false, watched: false }), 
    createFilePattern(gulpConfig.tmpApp + '**/*.js.map', { included: false, watched: false }) 
    ]; 

    configuration.files = configuration.files.concat(files); 

    dependencies.forEach(function(key) { 
    configuration.files.push({ 
     pattern: 'node_modules/' + key + '/**/*.js', 
     included: false, 
     watched: false 
    }); 
    }); 

    if (process.env.APPVEYOR) { 
    configuration.browsers = ['IE']; 
    configuration.singleRun = true; 
    configuration.browserNoActivityTimeout = 90000; // Note: default value (10000) is not enough 
    } 

    config.set(configuration); 

    // Helpers 
    function createFilePattern(path, config) { 
    config.pattern = path; 
    return config; 
    } 
} 

UPDATE 私のソリューションは、すべて私のzone.jsファイルがkarma.conf.jsで最後にロードされていた確実に関与しました。私が含まれている何か他のものがpolyfillを含んでいたと推測していますが、zone.jsの後にロードされていたため、エラーが発生しました。 zone.jsを最後まで動かすと、すべて正常に機能しました。

答えて

3

同じ問題が発生しました。 (Angular 2 RC.7 Jasmine Karma)それは私がkarma.conf.jsにテストファイルをロードしていたためです。私は/systemjs/dist/system-polyfills.js/zone.js/dist/zone.jsをロードしました。 systemjs polyfillsがこの問題を解決した後、zone.jsをロードするファイルの順序を変更します。

ここで私のためにエラーを解決したkarma.conf.jsの現在の設定があります。

files: [ 
    {pattern: 'dist/vendor/es6-shim/es6-shim.js', included: true, watched: false}, 
    {pattern: 'dist/vendor/reflect-metadata/Reflect.js', included: true, watched: false}, 
    {pattern: 'dist/vendor/systemjs/dist/system-polyfills.js', included: true, watched: false}, 
    {pattern: 'dist/vendor/systemjs/dist/system.src.js', included: true, watched: false}, 
    {pattern: 'dist/vendor/zone.js/dist/zone.js', included: true, watched: false}, 
    {pattern: 'dist/vendor/zone.js/dist/proxy.js', included: true, watched: false}, 
    {pattern: 'dist/vendor/zone.js/dist/sync-test.js', included: true, watched: false}, 
    {pattern: 'dist/vendor/zone.js/dist/long-stack-trace-zone.js', included: true, watched: false}, 
    {pattern: 'dist/vendor/zone.js/dist/async-test.js', included: true, watched: false}, 
    {pattern: 'dist/vendor/zone.js/dist/fake-async-test.js', included: true, watched: false}, 
    {pattern: 'dist/vendor/zone.js/dist/jasmine-patch.js', included: true, watched: false}, 

    {pattern: 'config/karma-test-shim.js', included: true, watched: true}, 

    // Distribution folder. 
    {pattern: 'dist/**/*', included: false, watched: true} 
], 
+0

を残念ながら私はのsytem-pollyfills.js含めておりません:(私は先に行くと、私のkarma.conf.jsとあるsystem.confを投稿します。 js –

+1

しかし、すべてのzone.jsファイルをリストの最後に移動した後、すべてが解決されました。正しい方向に私を指してくれてありがとう。 –

0

また、zone.jsの前にes6-promiseを含める必要がありました。 HTH。

0

私が行ったのと同じ愚かなエラーを誰かがすると、これに私の経験を追加するだけです。 ngを使用して、私は.angular-cli.jsonの私のscriptsセクションで、次の持っていた:

... 
"scripts": [ 
    "../node_modules/bootstrap/dist/js/bootstrap.min.js", 
    "../node_modules/core-js/client/shim.min.js" 
], 
... 

私も覚えていない、なぜ私は最初の場所でそこshim.min.jsを入れて一体。しかし、いずれにせよ、それを削除した後、私のテストケースは今完璧に実行します。

... 
"scripts": [ 
    "../node_modules/bootstrap/dist/js/bootstrap.min.js" 
], 
... 
関連する問題