2016-04-24 7 views
5

मैं ngUpgrade का उपयोग करने के लिए ng1 से ng2 तक जाने की कोशिश कर रहा हूं, और अपग्रेड के दौरान मेरे कर्म/जैस्मीन परीक्षणों को भी पास करता हूं , लेकिन मैं एक त्रुटि में भाग रहा हूं जिसे मैं समझ नहीं सकता।ngUpgrade के साथ एक कोणीय ऐप का परीक्षण करना "अज्ञात प्रदाता: ng2.InjectorProvider <- ng2.Injector"

मैंने एक सेवा (Data) को एक ng2 @Injectable होने के लिए अपग्रेड किया है, और upgradeAdapter.downgradeNg2Provider का उपयोग अपने एनजी 1 ऐप में इंजेक्ट करने के लिए किया है। यह उत्पादन कोड में ठीक काम करता है।

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

किसी इकाई ngUpgrade के बीच में अपने कोड का परीक्षण की एक काम उदाहरण है:

लेकिन जब मैं अपने परीक्षण में यह इंजेक्षन $ करने की कोशिश, मैं इस त्रुटि मिलती है? मेरा ढेर वेबपैक-आधारित है। मैंने 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); 

उत्तर

0

असल में, आप उपयोग नहीं करना चाहिए कोणीय mocks 'module और inject लेकिन UpgradeProvider

यह अभी तक दस्तावेज नहीं है लेकिन कोणीय 2 के स्रोत कोड में कुछ सुराग हैं।

  1. आपका UpgradeAdapter उदाहरण एक सिंगलटन होना चाहिए।
  2. आपको का उपयोग करके अपने प्रदाताओं को UpgradeAdapter सिंगलटन में जोड़ना चाहिए।
  3. आपको UpgradeAdapter.bootstrap का उपयोग करके ऐप शुरू करना चाहिए, तो UpgradeAdapterRef उदाहरण ready के कॉलबैक फ़ंक्शन को दिए गए उदाहरण को पकड़ें।
  4. UpgradeAdapterRef उदाहरण से ng1Injector विशेषता प्राप्त करें।
  5. इंजेक्टर की सिंक्रोनस 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

आशा है कि यह मदद करता है

संबंधित मुद्दे