में देखने योग्य सेवा पर मेरे पास एक सेवा (चाइल्ड सर्विस) है जो किसी अन्य सेवा (इंटरैक्टविथसेवर सेवा) पर निर्भर करती है। बाद में सेवा (InteractWithServerService) का उपयोग सर्वर कॉल करने और "किसी भी प्रकार" के देखने योग्य को वापस करने के लिए किया जाता है। सादगी के लिए, मान लें कि यह देखने योग्य लौटाता है। मैं चाइल्ड सर्विस के लिए यूनिट टेस्ट लिखने की कोशिश कर रहा हूं। जब मैं निर्भर सेवा नकलीयूनिट परीक्षण जासूस कोणीय 2
ChildService
@Injectable()
export class ApplicationService {
constructor(private interactWithServerService:InteractWithServerService){;}
public GetMeData():string {
var output:string;
this.interactWithServerService.get("api/getSomeData").
subscribe(response =>{console.log("server response:", response);
output=response});
return output;
}
}
ServerInteractionService
@Injectable()
export class InteractWithServerService {
constructor(private http: Http) {
;
}
get(url: string): Observable<any> {
return this.http.get(this.url);
}
}
परीक्षण का मामला ठीक काम करता है। जैसे कि,
class MockInteractWithServerService {
get() {
return Observable.of("some text");
}
}
describe('Service:ChildService',() => {
let childService: ChildService;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
{ provide: InteractWithServerService, useClass: MockInteractWithServerService },
ChildService],
});
beforeEach(inject([ChildService], (actualService: ChildService) => {
childService= actualService;
}));
fit('should call server-call testCall()',() => {
let actualReturnvalue= childService.GetMeData();
expect(actualReturnvalue).toBe("some text");
});
});
उपरोक्त विधि प्राथमिकता नहीं दी जाती, जैसा कि मैंने "n" "n" निर्भरता के लिए नकली कक्षाएं लिख दें। तो मैं spyOn का उपयोग कर अपने यूनिट परीक्षण बनाना चाहता हूं। हालांकि, परीक्षण केस काम नहीं करता है और फेंकता है "त्रुटि: एचटीपी के लिए कोई प्रदाता नहीं!"। जबकि मैं समझता हूं कि त्रुटि क्या है, मैं जानना चाहता हूं कि इसे क्यों फेंक दिया गया है हालांकि मैं आश्रित सेवा पर जासूसी कर रहा हूं। ऐसा लगता है कि "spyOn" काम नहीं कर रहा है।
describe('Service:ChildService',() => {
let childService: ChildService;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
InteractWithServerService,
ChildService],
});
spyOn(InteractWithServerService.prototype, 'get').and
.callFake(()=>
{return Observable.of("some text");});
});
beforeEach(inject([ChildService], (actualService: ChildService) => {
childService= actualService;
}));
fit('should call server-call testCall()',() => {
let actualReturnvalue= childService.GetMeData();
expect(actualReturnvalue).toBe("some text");
});
});
क्या मुझे कुछ स्पष्ट याद आ रही है?
धन्यवाद @peeskillet पर जासूसी कर सकते हैं। एक जादू की तरह काम करता है। केवल एक चीज जो चिंताओं को "उपयोग वैल्यू" है और प्रत्येक विधि के लिए मनमाने ढंग से ऑब्जेक्ट लौटा रही है जिसे आप कॉल करेंगे। यह निश्चित रूप से गंदे दिखता है (बल्कि इतना साफ नहीं)। क्या इस तरह कोणीय हमें परीक्षण लिखना चाहता है? –
एक "मनमानी वस्तु" वास्तव में नकली वर्ग का उपयोग करने से अलग नहीं है। केवल अंतर यह है कि एक वर्ग में एक encapsulated है। अंत में वे दोनों मनमानी वस्तुएं हैं। आपकी कक्षा वास्तविक सेवा इंटरफ़ेस का विस्तार नहीं करती है। क्या मनमाना नहीं करता है? यह सब मायने रखता है कि ऑब्जेक्ट में वह तरीका है जिसे कॉल किया जाएगा। –
कोई रास्ता नहीं है कि मैं बहस कर रहा हूं कि नकली कक्षाएं उपयोग से बेहतर हैं Value।मेरा मुद्दा दोनों है - नकली कक्षा और उपयोग वैल्यू समाधान साफ दिखता नहीं है जब पुराने तरीके की तुलना में निर्भर वर्गों को इंजेक्ट करना और उन पर जासूसी करना। –