![](/img/trans.png)
[英]Unknown provider error in ngUpgrade (Angular 1/2 hybrid application)
[英]Testing an Angular app with ngUpgrade fails with “Unknown provider: ng2.InjectorProvider <- ng2.Injector”
我正在嘗試使用ngUpgrade
從ng1移動到ng2,並在升級期間保持我的Karma / Jasmine測試通過,但我遇到了一個我無法弄清楚的錯誤。
我已將服務( Data
)升級為ng2 @Injectable
,並使用upgradeAdapter.downgradeNg2Provider
將其注入我的ng1應用程序。 它在生產代碼中工作正常。
但是當我嘗試在我的測試中注入它時,我得到了這個錯誤:
Error: [$injector:unpr] Unknown provider: ng2.InjectorProvider <- ng2.Injector <- Data
任何人都有一個在ngUpgrade中間單元測試代碼的工作示例? 我的堆棧是基於Webpack的。 我試過跟蹤並轉換systemjs指南,但沒有任何運氣。
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的module
並inject
UpgradeProvider
。
它還沒有記錄,但在角度2的源代碼中有一些線索。
UpgradeAdapter
實例應該是單例。 UpgradeAdapter.addProvider
將提供程序添加到UpgradeAdapter
單例。 UpgradeAdapter.bootstrap
啟動應用程序,然后獲取為ready
的回調函數提供的UpgradeAdapterRef
實例。 ng1Injector
從屬性UpgradeAdapterRef
實例。 get
方法實例化您的服務。 這是一個有解決方案的plunker: https ://embed.plnkr.co/EauYut/
我們還發布了一篇關於Wishtack角度2遷移的博客文章。 我們很快將在博客上填寫更多關於角度2測試的帖子。
希望能幫助到你
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.