加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

使用ngUpgrade测试Angular应用程序失败,显示“未知提供程序:ng2

发布时间:2020-12-17 18:04:50 所属栏目:安全 来源:网络整理
导读:我正在尝试使用ngUpgrade从ng1移动到ng2,并在升级期间保持我的Karma / Jasmine测试通过,但是我遇到了一个我无法弄清楚的错误. 我已将服务(数据)升级为ng2 @Injectable,并使用upgradeAdapter.downgradeNg2Provider将其注入我的ng1应用程序.它在生产代码中工作
我正在尝试使用ngUpgrade从ng1移动到ng2,并在升级期间保持我的Karma / Jasmine测试通过,但是我遇到了一个我无法弄清楚的错误.

我已将服务(数据)升级为ng2 @Injectable,并使用upgradeAdapter.downgradeNg2Provider将其注入我的ng1应用程序.它在生产代码中工作正常.

但是当我尝试在我的测试中注入它时,我得到了这个错误:

Error: [$injector:unpr] Unknown provider: ng2.InjectorProvider <- ng2.Injector <- Data

任何人都有一个在ngUpgrade中间单元测试代码的工作示例?我的堆栈是基于Webpack的.我尝试跟随并转换systemjs guide,但没有任何运气.

karma.conf.js:

module.exports = function (config) {
  config.set({
    // base path used to resolve all patterns
    basePath: '',// frameworks to use
    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
    frameworks: ['jasmine'],// list of files/patterns to load in the browser
    files: [{ pattern: 'spec.bundle.js',watched: false }],// files to exclude
    exclude: [],plugins: [
      require('karma-phantomjs-launcher'),require('karma-jasmine'),require('karma-webpack')
    ],// preprocess matching files before serving them to the browser
    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
    preprocessors: { 'spec.bundle.js': ['webpack'] },webpack: require('./webpack.config'),webpackServer: {
      noInfo: true // prevent console spamming when running in Karma!
    },// available reporters: https://npmjs.org/browse/keyword/karma-reporter
    reporters: ['progress'],// web server port
    port: 9876,// enable colors in the output
    colors: true,// level of logging
    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
    logLevel: config.LOG_INFO,// toggle whether to watch files and rerun tests upon incurring changes
    autoWatch: true,// start these browsers
    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
    browsers: ['PhantomJS'],// if true,Karma runs tests once and exits
    singleRun: false
  });
};

spec.bundle.js

import 'angular';
import 'angular-mocks';

import 'es6-shim';
import 'reflect-metadata';

import 'angular2/src/core/di';
import test from 'angular2/testing';
import browser from 'angular2/platform/testing/browser';

test.setBaseTestProviders(browser.TEST_BROWSER_PLATFORM_PROVIDERS,browser.TEST_BROWSER_APPLICATION_PROVIDERS);

let context = require.context('./src',true,/.spec.js/);

context.keys().forEach(context);

解决方法

实际上,你不应该使用angular mocks的模块并注入升级提供者.

它还没有记录,但在角度2的源代码中有一些线索.

>您的UpgradeAdapter实例应该是单例.
>您应该使用UpgradeAdapter.addProvider将提供程序添加到UpgradeAdapter单例.
>您应该使用UpgradeAdapter.bootstrap启动应用程序,然后获取为ready的回调函数提供的UpgradeAdapterRef实例.
>从UpgradeAdapterRef实例获取ng1Injector属性.
>使用注入器的synchronuous get方法实例化您的服务.

这是一个解决方案的plunker:
https://embed.plnkr.co/EauYut/

我们还发布了一篇关于Wishtack角度2迁移的博客文章.我们很快将在博客上填写更多关于角度2测试的帖子.

http://www.blog.wishtack.com/#!AngularJS-vs-Angular-2-Should-I-Stay-or-Should-I-Go/cuhk/573b59710cf233ef713771b2

希望能帮助到你

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读