angularjs E2e परीक्षणों का मजाक करते समय एपीआई संशोधनों का पता कैसे लगाया जाता है?




unit-testing mocking (3)

मैं हमारी टीम की प्रोजेक्ट पर ठोस ई 2 ए परीक्षण नींव सेटअप करना चाहता हूं लेकिन मुझे उस प्रश्न का एक सरल समाधान नहीं मिल सकता है:

जब आप अपने सभी कॉलों का मजाक उड़ा रहे हैं, तो यह पता लगाने का सबसे अच्छा तरीका क्या है कि आपके सर्वर द्वारा दिए गए वस्तुओं का वास्तविक मॉडल संशोधित किया गया है?

आपके परीक्षण अभी भी पारित होंगे क्योंकि वे मॉडल के पुराने संस्करण का परीक्षण कर रहे हैं लेकिन ऐप संभावित रूप से टूटा हुआ है।

उदाहरण के लिए, यदि कोई नकली मानता है कि /api/users/1 null रिटर्न अगर उपयोगकर्ता मौजूद नहीं है, जब यह वास्तव में एक रिक्त ऑब्जेक्ट रिटर्न करता है, यद्यपि परीक्षण पास हो सकते हैं, तो जांच की जा रही व्यवहार गलत मान्यताओं पर निर्भर है और इसलिए अप्रत्याशित तरीके से विफल

या हो सकता है कि बैकएण्ड किसी भी तरह से अद्यतित नवीनतम मॉडल के साथ स्थैतिक जेसन फाइल प्रदान कर रहा है और फ्रंटएन्ड इस पर निर्भर है?

यह निश्चित रूप से यह प्रतीत होता है कि बैकएंड पर काम कर रहे लोगों और अग्रभाग पर काम कर रहे लोग अलग टीम हैं

मैं यहां का कोणीय 1.x और प्रोट्रेक्टर का उपयोग कर रहा हूं लेकिन यह वास्तव में प्रौद्योगिकी पर निर्भर नहीं करता है।


मुझे लगता है कि आप क्या कर रहे हैं (परीक्षण के दौरान फ्रंटएन्ट अलगाव) सही है, इसे इस तरह रखें।

आप अपने मोज़ों को सत्यापित करने के लिए क्या कर सकते हैं उनमें से एक है:

1) यदि फ्रंटएण्ड और बैकएंड कसकर युग्मित और एक साथ विकसित किए गए हैं - तो एपीआई प्रतिक्रियाओं को सत्यापित करने के लिए बैकएंड के लिए इकाई परीक्षण का एक सेट जोड़ें। इस तरह यदि एपीआई में कुछ बदलाव होता है, तो बैकेंड परीक्षण विफल हो जाएंगे और आपको पता चल जाएगा कि फ्रंटएंड मोजे को भी अपडेट किया जाना चाहिए।

विकास के दौरान आप परीक्षण के दोनों सेट (ई 2 ए और बैकएंड यूनिट परीक्षण) समय-समय पर या प्रत्येक कोड में भी बदल सकते हैं।

2) यदि फ्रंटएंड बैकएंड से अधिक या कम स्वतंत्र है, तो आपको कुछ एकीकरण परीक्षण करने की आवश्यकता है, जिसे आप ई 2 ए टेस्ट के अलावा चलाएंगे। इन्हें वास्तविक HTTP अनुरोधों को बैकएंड में करना चाहिए और आपके मोजे के साथ डेटा डेटा संरचना की तुलना करना चाहिए। इस तरह आप स्थिति का पता लगा सकते हैं जब मोज़े पुरानी हो जाएं

दूसरा दृष्टिकोण अधिक विश्वसनीय है, लेकिन एकीकरण परीक्षण शायद बैकएंड यूनिट परीक्षणों की तुलना में धीमी हो जाएगा, इसलिए आप उन्हें स्थानीय सर्वर के दौरान स्वचालित रूप से सीआई सर्वर पर चला सकते हैं।


आपको एक HTTP इंटरसेप्टर पंजीकृत करने की आवश्यकता है जो अनुरोध पर डेटा संग्रहीत करता है: window.e2eHttp[request.url] = null; , प्रतिक्रिया + प्रतिक्रिया window.e2eHttp[request.url] = result; : window.e2eHttp[request.url] = result;

इंटरसेप्टर को टॉगल करने और बंद करने के लिए आप अपने समाधान में एक फ्लैग को इंजेक्ट या प्रयोग करने के लिए प्रक्षेपक के कोणीय मॉड्यूल सिस्टम का उपयोग कर सकते हैं, e2eService.isEnabled()

फिर अपने e2e परीक्षण में आपको एक browser.wait + browser.executeScript को कार्यान्वित करने की आवश्यकता है। window.e2eHttp[request.url] browser.wait + browser.executeScript window.e2eHttp[request.url] तक। window.e2eHttp[request.url] में डेटा है यह हमेशा कोणीय HTTP प्रतिक्रिया ऑब्जेक्ट (HTTP स्थिति शीर्ष लेख, डेटा, ect) होगा


@Lalanc Meneses के समान समाधान एक JSON फ़ाइल में प्रत्येक कॉल की प्रतिक्रिया को बचाएगा। अपने ई 2 ए टेस्ट के लिए इंटरसेप्टर के भीतर अपनी प्रतिक्रिया को सहेजें और उसके बाद E2e परीक्षणों के लिए सहेजी JSON फाइल का उपयोग करें। ये कॉल JSON आपके एपीआई सेवा को चलाने के दौरान स्वचालित रूप से अपडेट हो जाएगा। यह पहली बार मॉडल को स्टोर करने के लिए एक बार आपके सभी सेवाओं को चलाने की आवश्यकता होगी और फिर इसे आपके e2e परीक्षणों के लिए उपयोग करेगा मॉडल को अपडेट किया जाएगा जैसे ही आप अपना अद्यतित एपीआई चलाते हैं। आप उत्पादन के निर्माण के लिए प्रतिक्रिया को रोकने के लिए एक टॉगल बना सकते हैं।





e2e-testing