我有一个需要测试的角度控制器。此控制器调用服务以从服务器检索数据。该服务返回ES6承诺。与ES6的同步/捕捉方法茉莉花的约定
function MyController($scope, MyService) {
$scope.doSomething = function() {
MyService.foo().then() {
whatever...;
};
};
};
在我的茉莉花测试,我嘲笑这也返回承诺服务:
我手动调用全球决心(或拒绝)带或不带参数来检查我的控制器上。
it('shall call the service', function() {
$scope = $rootScope.$new();
controller = $controller('MyService', { $scope: $scope });
controller.doSomething();
myService.resolve();
expect(whatever...);
});
问题是解析调用是异步的。所以我正在测试我的预期结果,同时运行then函数。
我试图返回一个简单的自定义对象,将解析作为一个同步调用,但事实证明Promise有一些特定的规则,在模拟中重新实现会非常麻烦(比如当你有时。 ().catch()。然后模式)。
有没有办法在Jasmine中以简单同步的方式测试这种事情?
只是不要试图使承诺同步。即使在您的测试套件中,嵌入异步也是如此。 – Bergi