【问题标题】:jasmine no pending request to flush POST茉莉花没有待处理的刷新 POST 请求
【发布时间】:2015-04-08 21:51:55
【问题描述】:

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

    $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 时,我得到了著名的“没有挂起的刷新请求”。控制器函数如下所示:

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

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

不明白!!我试图在控制器中放置一些 console.log 语句,看看它是否正在命中它......我没有看到它进入程序。然而,expect(controller.saveUser).toHaveBeenCalled() 是成功的。

这里是数据服务:

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

UGGH 为什么会这样????

【问题讨论】:

    标签: angularjs unit-testing jasmine karma-jasmine


    【解决方案1】:

    您的测试中有两次$httpBackend.flush();。第一个是可能导致错误的那个。删除该行。在您完成可刷新的操作之前,您不想flush()

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

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

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

    【讨论】:

    • 是的,刚刚发现......我真正需要的是一个expectPOST检查,以确保POST被执行......谢谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 2021-12-14
    • 1970-01-01
    相关资源
    最近更新 更多