Aşağıdaki Açısal servis ve alay/test kurulumuna sahibim. Sahte http isteğinin düzgün çalışmasını sağlayamıyorum. Fabrikamdan bir söz veriyorum ve HTTP isteğinin alay konusu olmasına karşın, denetleyicinin kapsamındaki veriler, fabrikada aranan http hizmetinden döndürülen veriler değil.Jasmine Mock for valans hizmetini kullanarak
Gördüğünüz gibi, $rootScope
ve $httpBackend
numaralı telefonlardan $digest()
'u aradım. Kaybettim.
Klavyeden kodun düzgün şekilde çalıştığını ve metni hizmetten görüntülediğini görebilirsiniz, ancak sahte çalışmaz.
Neden?
keman
buradadır:var myApp = angular.module('myApp', []);
var ep = '/echo/json/';
myApp.factory('dataFactory', function($http) {
var getData = function() {
var data = $.param({
json: JSON.stringify({
name: "Name from Echo Service"
})
});
return $http.post(ep, data);
}
return {
getData: getData
}
});
myApp.controller('MyCtrl', function($scope, dataFactory) {
$scope.name = 'Original Name';
dataFactory.getData().then(function(data) {
$scope.name = data.data.name;
});
});
describe('Test For Site', function() {
beforeEach(angular.mock.module('myApp'));
var $controller;
var $httpBackend;
var $q;
var $rootScope;
beforeEach(angular.mock.inject(function(_$controller_, _$httpBackend_, _$q_, _$rootScope_) {
$controller = _$controller_;
$httpBackend = _$httpBackend_;
$q = _$q_;
$rootScope = _$rootScope_;
}));
describe('test pageController', function() {
it('Should pass', function() {
var scope = {};
$httpBackend.expect('POST', ep);
$httpBackend.whenPOST(ep, function(str) {
return true;
}).respond(
function() {
return {
name: "Name from Echo Service"
};
});
var controller = $controller('MyCtrl', {
$scope: scope,
});
$httpBackend.flush();
$rootScope.$digest();
$rootScope.$flush();
expect(scope.name).toBe('Name from Echo Service');
});
});
});
Burada HTML
<div ng-controller="MyCtrl">
Hello, {{name}}!
</div>
<br/>