javascript - 如何在 AngularJS 中测试具有 $q promise 和 karma 的服务功能

标签 javascript angularjs karma-jasmine

我有一个服务,在该服务内,我有这样的功能

 settings.updateProfile = function(patient){
        return $q(function(resolve, reject) {
            var user = patient;
                dbService.updateUser(user).then(
                    function (response) {
                        if (response.res) {
                            LoopBackAuth.setUser(LoopBackAuth.accessTokenId, response.res.name, LoopBackAuth.currentUserRole);
                            LoopBackAuth.save();
                            location.reload();
                            patient.name == response.res.name ? resolve(true) : resolve(false);
                        }
                    },
                    function (error) {
                        resolve(false);
                    }
                );

        });
    };

这里 dbService.updateUser 函数也包含 $promise。我想测试这个函数并检查它是否解决了 true 或 false。我知道对于 http api 调用,我们使用 $httpBackend 服务。但它并没有像我预期的那样工作。现在我正在这样测试。

  it('Should return correct result', function() {
        var result = true;
        var patient = {"name": "newUser"};

        $httpBackend.whenGET(patient).respond(200, $q.when(result));
        expect(settingsFactory.updateProfile).not.toHaveBeenCalled();
        expect(result).toEqual(true);

        settingsFactory.updateProfile(patient)
            .then(function(res) {
               result = res;
            });

        $httpBackend.flush();
        expect(settingsFactory.updateProfile).toHaveBeenCalledWith(patient);
    });

显示错误:

 Error: Unexpected request

最佳答案

$httpBackend.whenGET(patient).respond(...);

失败,因为 patent 是一个对象 {"name": "newUser"} 并且 whenGET 需要一个字符串。例如:

$httpBackend.whenGET('/patient').respond(...);

关于javascript - 如何在 AngularJS 中测试具有 $q promise 和 karma 的服务功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40991152/

相关文章:

$http.jsonp 中设置的 angularjs $scope 变量在 .html 中不可用

Angular2 - 预期的安全值必须使用 [property] = binding

angularjs - Jasmine 未定义不是对象,找不到键

javascript - 动画效果 div 不应该去它的初始位置后,它应该在使用 css 从底部到顶部时停留在顶部

javascript - 没有表格的页面并排翻译

javascript - OBJ 文件在 Threejs 中无法正确渲染

android - cordova 相机插件获取所选图像的真实路径

javascript - 嵌套检查所有和取消检查所有模型应该使用 angularjs 反射(reflect)在 JSON 中

Angular Jasmine 测试超时

javascript - 构建多条路线,从 HERE map 上的数组中获取端点