首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ZoneAwarePromise已被重写

ZoneAwarePromise已被重写
EN

Stack Overflow用户
提问于 2016-09-14 17:13:37
回答 3查看 9K关注 0票数 4

在将应用程序升级到rc-7并运行我的单元测试以确保没有发生故障后,我在大约一半的单元测试上得到了这条错误消息。

“错误: Zone.js检测到ZoneAwarePromise‘’(窗口为全局的).Promise‘已被覆盖。最有可能的原因是在Zone.js之后加载了一个承诺的填充(在加载zone.js时,没有必要加载它。如果您必须加载一个,那么在加载zone.js之前,在节点_modules/zone.js/dist/zone.js(第21行)中加载它)。”

我能想到的最接近的事情是,我通过手动返回可观察值来模拟来自单元测试中http调用的响应。

这是一个使用Jasmine和Karma进行单元测试的Angular2应用程序。

更新,因此,根据错误消息,这似乎是一个加载顺序问题,但是,我不会在我可以确定的任何地方加载填充,除非我意外地抓住了它们。我附加了我的karma.conf.js和systemjs.conf.js,以帮助查找错误。

Karma.conf.js

代码语言:javascript
复制
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中最后加载的。我猜我还包括了一些其他的内容,也包括了多边形填充,但是是在zone.js之后加载的,因此出现了错误。在把zone.js移到最后之后,一切都很好。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-15 09:47:06

我也遇到了同样的问题。(角2 RC.7茉莉花)这是由于我在我的karma.conf.js.中加载测试文件的命令。我在/zone.js/dist/zone.js之前装载/systemjs/dist/system-polyfills.js.在systemjs填充解决了这个问题之后,更改文件的顺序来加载zone.js。

下面是我在karma.conf.js中的当前设置,它解决了我的错误。

代码语言:javascript
复制
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}
],
票数 3
EN

Stack Overflow用户

发布于 2016-09-26 16:26:42

在zone.js之前,我还必须包括ES6-承诺。HTH。

票数 0
EN

Stack Overflow用户

发布于 2017-03-17 16:46:37

如果有人犯了和我一样愚蠢的错误的话,那就补充一下我的经验吧。使用ng,我在.angular-cli.jsonscripts部分中有以下内容

代码语言:javascript
复制
...
"scripts": [
    "../node_modules/bootstrap/dist/js/bootstrap.min.js",
    "../node_modules/core-js/client/shim.min.js"
],
...

我甚至不记得,为什么我把shim.min.js放在第一位。但是无论如何,在移除它之后,我的测试用例现在运行得完美无缺:

代码语言:javascript
复制
...
"scripts": [
    "../node_modules/bootstrap/dist/js/bootstrap.min.js"
],
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39496171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档