【问题标题】:Angular with then callback in mock jasmine test在模拟茉莉花测试中带有然后回调的角度
【发布时间】:2015-02-24 04:47:20
【问题描述】:

您好,我想知道是否有人可以告诉我如何在 Angular 和 jasmine 2 的模拟测试中测试回调结果。我们有一个服务,它的调用只返回一些数据,如下所示:

var getStuff = function (id) {
     return $http.get("url/" + id)
                .then(function (response) {
                    return response.data;
                });
        }; 

在我们的控制器中,我们在启动时调用此服务:

angular.module('controllers').controller("myController", ['$scope',  'service', function ($scope, service) {

    var onGetStuff = function(data) {
        //do something with the result here 
    }

    $scope.getItems = function() {
        service.getStuff(1).then(onGetStuff);
    }


    $scope.getItems();
}]);

然后我正在运行我的测试(稍后将发布代码,但从未调用过 onGetStuff,我似乎无法弄清楚原因。这是测试代码:

//includes here

describe('Controller: Applicant Controller', function () {

    var controller, $q, $scope, mockService, deferred, $rootScope;

    beforeEach(module("controllers"));

beforeEach(function() {
        mockService = {
            getStuff: function (id) {
                deferred = $q.defer();
                deferred.resolve({somestuff: 1});
                return deferred.promise;
            }
        };

        spyOn(mockService, 'getStuff').and.callThrough();
});

 beforeEach(inject(function ($rootScope, $controller, _$q_) {
        $scope = $rootScope.$new();
        $q = _$q_;

        controller = $controller('myController', {
            $scope: $scope,
            service: mockService
        });
 }));


    it("it should work", function () {
        debugger;
    });

});

如果我在 chrome 中单步调试调试器,模拟服务会被调用,但我的控制器中的“onGetStuff”调用从未被调用过,有人能找出原因吗?

谢谢 莫西。

【问题讨论】:

    标签: angularjs jasmine


    【解决方案1】:

    创建控制器后,您需要调用$rootScope.$apply() 才能运行任何then 回调。

    【讨论】:

    • thx 伙计,尽管在其他帖子中提到过,但完全错过了这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 2017-05-02
    • 2020-03-27
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    相关资源
    最近更新 更多