2012-12-16 11 views
6

एंड-टू-एंड टेस्ट के दौरान AJAX अनुरोध को मॉक करने के लिए Landscap.js को संशोधित करने का सबसे आसान तरीका क्या है?AJAX अनुरोध का नकल कैसे करें?

<!doctype html> 
<html lang="en" ng-app="myApp"> 
<head> 
    <meta charset="utf-8"> 
    <title>My Test AngularJS App</title> 
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js"></script> 
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular-resource.min.js"></script> 

    <script language="javascript" type="text/javascript"> 
     angular.module('myApp', ['ngResource']); 
     function PlayerController($scope,$resource){ 
     $scope.player = $resource('player.json').get(); 
     } 
    </script> 

</head> 
    <body ng-controller="PlayerController"> 
    <p>Hello {{player.name}}</p> 
    </body> 
</html> 

प्लेयर सर्वर पर player.json नामक फ़ाइल से सही ढंग से प्राप्त किया जाता है और निम्न परीक्षण पास होते हैं। मैं इस परीक्षण में अलग-अलग जेसन कैसे पास करूं और सर्वर पर वापस लाने को रोकूं?

/* 
How do I pass in 
player.json -> {"name":"Chris"} 
*/ 
describe('my app', function() { 

    beforeEach(function() { 
    browser().navigateTo('../../app/index.html'); 
    }); 

    it('should load player from player.json', function() { 
    expect(element('p:first').text()). 
     toMatch("Hello Chris"); 
    pause(); 
    }); 

}); 

उत्तर

4

आप $httpBackend from ngMockE2E module का उपयोग HTTP अनुरोध उपहास करने के लिए करना चाहिए। दस्तावेज़ों पर एक नज़र डालें।

+3

मेरे मुद्दा यह है कि मैं डॉक्स में ngMockE2E उदाहरण नहीं देख पा रहे है। मैं परिदृश्य.जेएस में जोड़ने के लिए कोड की कुछ पंक्तियों की तलाश में हूं। – Chris

+0

यदि आप अपना प्रश्न सही ढंग से समझ रहे हैं तो आपको मॉड्यूल.जेएस को संशोधित करने की आवश्यकता नहीं है। Caio का जवाब इस स्थिति को संभालने का मानक तरीका है –

+3

ठीक है। मुझे स्पष्ट होने दो। मुझे समझ में नहीं आता कि कैओ की सिफारिश क्या कर रही है। दस्तावेज द्वारा कुछ जादू है जिसे "बाद में, इस नए मॉड्यूल के साथ अपने ऐप को बूटस्ट्रैप" के रूप में माना जा रहा है। किसी से ऐसा कैसे संभव है? – Chris

0

शुरुआत के रूप में, कोणीय-mocks.js और फ़ाइल (उदाहरण के लिए app.js) जोड़ें जहां आप अपने index.html पृष्ठ पर मॉड्यूल बनायेंगे जिसमें ng-app घोषणा शामिल है।

<html lang="en" ng-app="myApp"> 
    <head> 
    <script src="js/app.js"></script> 
    <script src="../test/lib/angular/angular-mocks.js"></script> 
    ... 

फिर app.js फ़ाइल में मॉड्यूल को परिभाषित करें और नकली प्रतिक्रियाएं जोड़ें।

var myAppDev = angular.module('myApp', ['ngResource','ngMockE2E']); 

myAppDev.run(function($httpBackend) { 
    var user = {name: 'Sandra'}; 
    $httpBackend.whenGET('/api/user').respond(user); 
}); 
0

ऐसा प्रतीत होता है कि वर्तमान में आप $ httpBackend मॉकिंग को शामिल करने के लिए परिदृश्य.जेएस को केवल संशोधित नहीं कर सकते हैं। आपको इसका समर्थन करने के लिए कुछ अन्य कोड जोड़ना होगा।

मेरे लिए सबसे अच्छा तरीका हो के लिए निम्न

अपने परीक्षण फ़ोल्डर है कि 'ngMockE2E' भी शामिल है, ताकि आप अपने मौजूदा app.js अपवित्र की जरूरत नहीं है में एक myAppTest.js जोड़े लगता है

'use strict'; 

angular.module('myAppTest', ['myApp', 'ngMockE2E']) 
.run(function($httpBackend) { 
    var user = {name: 'Sandra'}; 
    $httpBackend.whenGET('/api/user').respond(user); 
}); 

फिर एक अलग test-index.html जोड़ें जो नए myAppTest.js का उपयोग करता है। ध्यान दें कि आपको कोणीय-mocks.js शामिल करने की आवश्यकता है। (यह अपने उत्पादन html फ़ाइल बरकरार है और mocks से मुक्त छोड़ देता है)

<!doctype html> 
<html lang="en" ng-app="myAppTest"> 
<head> 
    <script src="lib/angular/angular.js"></script> 
    <script src="lib/angular/angular-resource.js"></script> 
    <script src="../test/lib/angular/angular-mocks.js"></script> 
    <script src="js/app.js"></script> 
    <script src="js/controllers.js"></script> 
    <script src="../test/e2e/myAppTest.js"></script> 
</head> 
<body> 
    <div ng-view></div> 
</body> 
</html> 
फिर अपने scenarios.js सिर्फ अन्य परीक्षण चलाने से पहले अपने नए परीक्षण-index.html संदर्भ में

beforeEach(function() { 
    browser().navigateTo('../../app/test-index.html#/'); 
}); 

मैं इस उदाहरण अनुकूलित किया है:

https://github.com/stephennancekivell/angular_e2e_http/tree/ngMockE2E

+1

आप अपने मूल ऐप में मार्गों का परीक्षण कैसे कर रहे हैं? मार्ग ऐप नाम के साथ कॉन्फ़िगर किया गया है – wakandan

संबंधित मुद्दे