के साथ कोणीय 2 परीक्षण घटक के साथ त्रुटि इस परीक्षण उपयोगिता TestBed
को सरल उदाहरण के साथ कोणीय -2 में सीखने की कोशिश कर रही है और मेरा पहला अवरोधक मारा है। गूगल या तो खोज मिलता-जुलता कोई उदाहरण उपज नहीं था,टेस्टबेड
, मैं एक बहुत ही बुनियादी घटक header
के रूप में नीचे है -
import { TestBed } from '@angular/core/testing';
import { HeaderComponent } from './header.component';
describe('HeaderComponent Test',() => {
let component: HeaderComponent;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [HeaderComponent]
});
const fixture = TestBed.createComponent(HeaderComponent);
component = fixture.componentInstance;
});
it('should have the component defined',() => {
expect(component).toBeDefined();
});
it('should initialize the title to test',() => {
expect(component.title).toBe('test');
});
});
-import { Component } from '@angular/core'; @Component({ selector: 'header', template: '' }) export class HeaderComponent{ public title: string; constructor(testparam: string){ this.title = 'test'; } }
और फिर नीचे के रूप में अपनी कल्पना है
कर्म परीक्षण चलाने फेंक रहा है -
Error: No provider for String! in karma.entry.js
karma.entry.js मूल रूप से सिर्फ टेस्टबेड के लिए परीक्षण env विन्यास स्थापित कर रही है और फिर मेरी कल्पना फ़ोल्डर में प्रत्येक परीक्षा के माध्यम से चला जाता है, नीचे मेरी karma.entry.js
require('core-js/es6');
require('core-js/es7/reflect');
require('es6-shim');
require('reflect-metadata');
require('zone.js/dist/zone');
require('zone.js/dist/long-stack-trace-zone');
require('zone.js/dist/proxy');
require('zone.js/dist/sync-test');
require('zone.js/dist/jasmine-patch');
require('zone.js/dist/async-test');
require('zone.js/dist/fake-async-test');
require('rxjs/Rx');
const browserTesting = require('@angular/platform-browser-dynamic/testing');
const coreTesting = require('@angular/core/testing');
coreTesting.TestBed.initTestEnvironment(
browserTesting.BrowserDynamicTestingModule,
browserTesting.platformBrowserDynamicTesting()
);
const context = require.context('../src', true, /\.spec\.ts$/);
context.keys().forEach(context);
Error.stackTraceLimit = Infinity;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 2000;
है अगर मैं निर्माता से पैरामीटर को निकालने घटक वर्ग के, परीक्षण पास हो जाते हैं, इसलिए मैं सोच रहा हूं कि मुझे कुछ पूर्व-कॉन्फ़िगरेशन याद आ रही है जो TestBed.createComponent(HeaderComponent)
को स्ट्रिंग प्रकार पैरामीटर के साथ घटक के कन्स्ट्रक्टर को ठीक से संकलित नहीं करने का कारण बनती है।
कोई सुराग जो मुझे याद आ रही है?
अद्यतन:
अगर यह किसी को भी मदद करता है - @ mrkosima के उत्तर के आधार पर, मेरे अद्यतन घटक वर्ग अब नीचे की तरह दिखता है और इकाई परीक्षण सब अच्छा अब पारित :)
import { Component, OpaqueToken, Inject } from '@angular/core';
export let TITLE_TOKEN = new OpaqueToken('title token');
@Component({
selector: 'header',
template: '',
providers: [{ provide: TITLE_TOKEN, useValue: 'test' }]
})
export class HeaderComponent{
public title: string;
constructor(@Inject(TITLE_TOKEN) titleParam: string){
this.title = titleParam;
}
}
ठीक है, तो यह कोणीय डी ढांचा है कि टेस्टबैड घटक वर्ग को तुरंत चालू करने के लिए उपयोग करता है, जिसके कारण घटक के कन्स्ट्रक्टर में सीधे चीजों की प्रकार या इंटरफेस को इंजेक्ट करना संभव नहीं है, और 'ओपेक टोकन' रैपर की आवश्यकता होती है। इससे पहले जब मैंने डी पढ़ा, मैंने इस भाग को आलस्य से बाहर छोड़ दिया :) और यह मुद्दा था। Thnx @mrkosima, मुझे लगता है कि यह डी पैटर्न समझ में आता है क्योंकि अब टाइपस्क्रिप्ट के साथ हम ज्यादातर ओओपीएस पैटर्न का उपयोग करेंगे और ज्यादातर घटक कन्स्ट्रक्टरों को कक्षा-प्रकार या कोणीय सेवाओं को पारित करेंगे, धन्यवाद। – kkap