茉莉没有待冲洗POST的待处理请求

时间:2015-04-08 21:51:55

标签: angularjs unit-testing jasmine karma-jasmine

所以我在茉莉花中进行了以下测试:

    $httpBackend.whenPOST('/api/userdata/saveuser').respond({ 'result': 'true' })

it('should save the new or updated user', function () {
        var controller = createController();
        $httpBackend.flush();
        spyOn(controller, 'saveUser');

        controller.saveUser();
        $httpBackend.flush();
        expect(controller.saveUser).toHaveBeenCalled();
    })

当我在saveUser之后执行FLUSH时,我得到了着名的'没有待处理的冲洗请求#39;。控制器功能如下所示:

  user.saveUser = function () {
          userDataService.saveUser(user.data).then(function (result) {
             $state.go("license", { guid: user.data.user.account });
        });
    };

当然注意我在控制器的任何地方都没有使用$ scope。

别得!我试图在控制器中放入一些console.log语句,看看它是否正在点击它...而且我没有看到它进入程序。期望(controller.saveUser).toHaveBeenCalled()成功。

这是dataservice:

function saveUser(user) {
            return $http.post("/api/userdata/saveuser", user.data).success(returndata).error(returnerror)
        };

UGGH为什么会这样?????

1 个答案:

答案 0 :(得分:2)

你的测试中有$httpBackend.flush();两次。第一个是可能导致错误的那个。删除该行。在你做了可以冲洗的事情之前,你不想flush()

另外,你正在监视你正在测试的方法。删除该行,或至少将其更改为:

spyOn(controller, 'saveUser').and.callThrough();

窥探那种方法实际上没有意义。你知道它会起作用,因为你的测试会直接调用它。