在这种情况下模拟$ http承诺的最佳方法

时间:2015-04-15 04:59:49

标签: angularjs unit-testing mocking

我有一个直接返回http promise的工厂函数(它大约有3层深,我根本不关心路径和返回的内容)

看起来像这样:

user.create()
    .success(function(result){})
    .error(function(err){})

我只是想模仿成功和错误位。我尝试过使用$ q并解析或拒绝它,但这似乎不适用于成功和错误。

我带q的模拟工厂看起来像:

var user = {
    create: function (email) {
        var deferred = q.defer();
        deferred.resolve();
        return deferred.promise;
    }
};

几乎就是我想要使用的东西。有没有办法q可以返回成功和错误而不是那么?


这样可以执行代码(我基于$ http源代码),但不知道如何用它来测试逻辑

var factory = {
        factoryFunction: function () {
            var deferred = q.defer();

            //You can test that it was called here
            deferred.resolve();

            var promise = deferred.promise;
            promise.success = function (fn) {
                //Both success and error get called... be careful
                return promise;
            };

            promise.error = function (fn) {
                //Both success and error get called... be careful
                return promise;
            };
            return promise;
        }
    };

1 个答案:

答案 0 :(得分:0)

如果您使用Jasmine对此进行测试,则可以使用spyOn。

spyOn(工厂,'创建')。和CallFake(function(){     return $ .Deferred()。resolve({         ReturnObject:true     }); });

这个网站有一个很好的列表,列出了如何使用spyOn:http://tobyho.com/2011/12/15/jasmine-spy-cheatsheet/

相关问题