Я хотел бы знать, какой будет лучший способ тестирования функций, которые ничего не возвращают (просто изменяет значение поля) и содержат асинхронный вызов.Жасмин: тестовая функция void, содержащая асинхронный вызов
Этот контроллер в AngularJS я хочу проверить, сервис я называю возвращает обещание (всегда возвращает {имя: «Джон»}):
app.controller('MyCtrl', function($scope, AsyncService) {
$scope.greeting = "";
$scope.error =
$scope.sayHello = function() {
AsyncService.getName().then(
function(data){
$scope.saludo = "Hello " + data.name;
},
function(data){
$scope.error = data;
}
);
};
});
Это будет спецификация, если функция SayHello не содержат асинхронный вызов, но он всегда терпит неудачу, поскольку scope.greeting всегда пуст.
describe('Test My Controller', function() {
var scope, $httpBackend;
// Load the module with MainController
//mock Application to allow us to inject our own dependencies
beforeEach(angular.mock.module('app'));
//mock the controller for the same reason and include $rootScope and $controller
beforeEach(angular.mock.inject(function($rootScope, $controller,_$httpBackend_){
//Mock the service to always return "John"
$httpBackend = _$httpBackend_;
$httpBackend.when('POST', 'http://localhost:8080/greeting').respond({name: "John"});
//create an empty scope
scope = $rootScope.$new();
//declare the controller and inject our empty scope
$controller('MyCtrl', {$scope: scope});
}));
it('$scope.greeting should get filled after sayHello', function() {
expect(scope.greeting).toEqual("");
scope.sayHello();
expect(scope.greeting).toEqual("Hello John");
});*/
});
Как я могу использовать эту спецификацию для обработки асинхронного вызова? Я действительно не понимаю, как и где использовать флаг «done» Jasmine 2.0.
Дублировать [http://stackoverflow.com/questions/21323996/angularjs-test-scope-methods-that-make-async-calls](http://stackoverflow .com/вопросы/21323996/angularjs-тест-Scope методы, которые делают-Асинхр-звонки) – razvanz