मैं routerLink
और routerLinkActive
के साथ एक (कोणीय 2) घटक का परीक्षण करने की कोशिश कर रहा हूं, लेकिन सभी परीक्षण मामले निम्नलिखित त्रुटि संदेश के साथ विफल हो जाते हैं। (नोट: मैंने राउटर और अन्य संबंधित निर्भरताओं को दबा दिया है। यहां संदर्भ जिसका मैंने उसी के लिए उपयोग किया था।)
अपरिभाषित की संपत्ति 'सदस्यता' नहीं पढ़ सकता
मैंने यह भी देखा है कि जब routerLink
और routerLinkActive
को मेरे टेम्प्लेट से हटा दिया जाएगा, तो सभी परीक्षण मामले बिना किसी त्रुटि के चलेंगे।
मुझे लगता है कि त्रुटि RouterTestingModule
या SharedModule
(पासवर्ड इनपुट फ़ील्ड को प्रदर्शित करने और मान्य करने के लिए घटक शामिल है) के कारण हुई है। इसलिए मैंने उन्हें हटाने या जोड़ने की कोशिश की, जो वास्तव में समस्या पैदा कर रहा है। यहाँ मैंने क्या देखा।
- मुझे '
Cannot read property 'subscribe' of undefined'
मिलता है अगरRouterTestingModule
याSharedModule
मौजूद है। - अगर मैं
RouterTestingModule
औरSharedModules
दोनों को हटा देता हूं तो मुझे राउटर से जुड़ी कोई त्रुटि नहीं मिलती है, लेकिनSharedModules
के तत्व घटक में लोड नहीं होंगे और कुछ परीक्षण मामले अभी भी विफल हो जाते हैं क्योंकि वह।
टेस्टबेड कॉन्फ़िगरेशन:
TestBed.configureTestingModule({
imports: [CoreModule,SharedModule,RouterTestingModule],
declarations: [ MyComponent,RouterLinkStubDirective,RouterOutletStubComponent ],
providers: [
FormBuilder,
{ provide: Router, useClass: RouterStub },
{ provide: ActivatedRoute, userClass: ActivatedRouteStub}
],
schemas: [NO_ERRORS_SCHEMA]
})
.overrideComponent(MyComponent, {
set: {
providers: [
{provide: AuthModel, useClass: MockAuthModel}
],
}
})
.compileComponents();
}));
सक्रिय राउटरस्टब:
@Injectable()
export class ActivatedRouteStub {
// ActivatedRoute.params is Observable
private subject = new BehaviorSubject(this.testParams);
params = this.subject.asObservable();
// Test parameters
private _testParams: {};
get testParams() { return this._testParams; }
set testParams(params: {}) {
this._testParams = params;
this.subject.next(params);
}
// ActivatedRoute.snapshot.params
get snapshot() {
return { params: this.testParams };
}
}
समस्या को हल करने के लिए मुझे क्या बदलाव करने चाहिए?
2 जवाब
मैं इस मुद्दे को हल करने में कामयाब रहा हूं। मैं सूची दूंगा कि मैंने इस मुद्दे को हल करने के लिए क्या बदलाव किए हैं।
जैसा कि मैंने टिप्पणियों में उल्लेख किया है,
routerLink
केवल वास्तविक राउटर पर काम करता है। इसलिए हमें RouterTestingModule (यदि आप परीक्षण के दौरान उस पर क्लिक करने की योजना बना रहे हैं, तो.withRoutes([{path: 'some/path',component: someComponent}])
शामिल करें) शामिल करने की आवश्यकता है।यदि हमने पहले ही
RouterTestingModule
जोड़ लिया है, तो हमें अलग से राउटर निर्भरता प्रदान करने की आवश्यकता नहीं है। इसलिए मैंनेRouter
औरActivatedRoute
निर्भरता जो मैंने प्रदान की थी, दोनों को हटा दिया। अब, त्रुटिCannot read property 'subscribe' of undefined
सेCannot read property 'outlets' of null
में बदल गई है।मैंने पाया यह त्रुटि तब होती है जब
routerLink
शून्य की ओर इशारा कर रहा हो चर . मेरे मामले में,favoriteUrl
नाम की संपत्ति जिसे मैंनेrouterLink
को सौंपा था, अलग परीक्षण वातावरण के कारण शून्य थी। इसलिए मैंने मैन्युअल रूप सेbeforeEach
फ़ंक्शन में संपत्ति के लिए एक मान निर्दिष्ट किया और इससे समस्या हल हो गई, कम से कम मेरे लिए।
मदद करने की कोशिश करने वाले सभी को धन्यवाद! :-)
सन्दर्भ:
https://stackoverflow.com/a/45916133/8558515
https://stackoverflow.com/a/42039920/8558515
कोणीय के पास यह जानने का कोई तरीका नहीं है कि आप इसे सक्रिय रूट चर का उपयोग करना चाहते हैं जिसे आपने स्वयं बनाया है (टिप्पणी के अनुसार) इसलिए यह डिफ़ॉल्ट बना देगा और डीआई में इसका उपयोग करेगा। ActivatedRoute निर्भरता के लिए वर्तमान सेटअप के बजाय { provide: ActivatedRoute, useValue: mockInstance}
का उपयोग करें जहां mockInstance
ActivatedRoute
का नकली है, आप इसे jasmine.createSpyObj
के साथ बना सकते हैं
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
angular
Google से वेब फ्रेमवर्क के बारे में प्रश्न इस टैग का उपयोग कोणीय प्रश्नों के लिए करें जो एक व्यक्तिगत संस्करण के लिए विशिष्ट नहीं हैं। पुराने AngularJS (1.x) वेब ढांचे के लिए, कोणीयज टैग का उपयोग करें।