unit-testing - यूनिट टेस्ट क्या है




कैसे एक इकाई का परीक्षण करने के लिए एक घटक है कि ActivatedRoute से मापदंडों पर निर्भर करता है? (4)

मैं एक घटक का परीक्षण करने वाली इकाई हूं जिसका उपयोग किसी वस्तु को संपादित करने के लिए किया जाता है। ऑब्जेक्ट में एक विशिष्ट id होती है जिसका उपयोग किसी ऑब्जेक्ट को किसी सेवा में होस्ट की जाने वाली ऑब्जेक्ट से विशिष्ट ऑब्जेक्ट को हथियाने के लिए किया जाता है। विशिष्ट id को एक पैरामीटर के माध्यम से प्राप्त किया जाता है जो कि रूटिंग के माध्यम से पारित किया जाता है, विशेष रूप से ActivatedRoute वर्ग के माध्यम से।

कंस्ट्रक्टर निम्नानुसार है:

 constructor(private _router:Router, private _curRoute:ActivatedRoute, private _session:Session) {
}

ngOnInit() {
    this._curRoute.params.subscribe(params => {
        this.userId = params['id'];
        this.userObj = this._session.allUsers.filter(user => user.id.toString() === this.userId.toString())[0];

मैं इस घटक पर बुनियादी इकाई परीक्षण चलाना चाहता हूं। हालांकि, मुझे यकीन नहीं है कि मैं id पैरामीटर को कैसे इंजेक्ट कर सकता हूं, और घटक को इस पैरामीटर की आवश्यकता है

वैसे: मेरे पास Session सेवा के लिए पहले से ही एक नकली है, इसलिए वहां कोई चिंता नहीं है।


Angular> 5 पर काम करने वाले कुछ लोगों के लिए, यदि Observable.of (); तब काम नहीं कर रहा है, वे 'rxjs' से {} का आयात करके () का उपयोग कर सकते हैं;


इसका सबसे सरल तरीका यह है कि आप केवल useValue विशेषता का उपयोग करें और उस मूल्य का एक अवलोकन प्रदान करें जिसे आप मॉक करना चाहते हैं।

{
  provide: ActivatedRoute,
  useValue: {
    params: Observable.of({id: 123})
  }
}

मुझे पता चला है कि यह कैसे करना है!

चूंकि ActivatedRoute एक सेवा है, इसलिए इसके लिए एक नकली सेवा स्थापित की जा सकती है। आइए इस मॉक सेवा को MockActivatedRoute । हम MockActivatedRoute में ActivatedRoute का विस्तार इस प्रकार करेंगे:

class MockActivatedRoute extends ActivatedRoute {
    constructor() {
        super(null, null, null, null, null);
        this.params = Observable.of({id: "5"});
    }

लाइन super(null, ....) सुपर क्लास को इनिशियलाइज़ करती है, जिसमें चार अनिवार्य पैरामीटर होते हैं। हालांकि, इस उदाहरण में, हमें इनमें से किसी भी पैरामीटर से कुछ भी नहीं चाहिए, इसलिए हम उन्हें null मानों के लिए प्रारंभ करते हैं। हम सभी की जरूरत है कि params का मान है जो एक Observable<> । इसलिए, this.params साथ, हम this.params के मूल्य को ओवरराइड करते हैं और इसे उस params this.params Observable<> होने के लिए आरम्भ करते हैं, जिस पर परीक्षण विषय निर्भर है।

फिर, किसी अन्य नकली सेवा के रूप में, बस इसे इनिशियलाइज़ करें और कंपोनेंट के लिए प्रदाता को ओवरराइड करें।

सौभाग्य!


यहाँ है कि मैंने इसे एंगुलर 2.0 नवीनतम में कैसे परीक्षण किया ...

import { ActivatedRoute, Data } from '@angular/router';

और प्रदाता अनुभाग में

{
  provide: ActivatedRoute,
  useValue: {
    data: {
      subscribe: (fn: (value: Data) => void) => fn({
        yourData: 'yolo'
      })
    }
  }
}






angular2-testing