茉莉花没有待处理的冲洗请求 POST
jasmine no pending request to flush POST
所以我在 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 时,我得到了著名的 'no pending requests to 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 为什么会这样????
您的测试中 $httpBackend.flush();
两次。第一个是可能导致错误的那个。删除该行。在完成可冲洗的操作之前,您不想 flush()
。
此外,您正在监视您正在测试的方法。也删除该行,或者至少将其更改为:
spyOn(controller, 'saveUser').and.callThrough();
监视那个方法实际上没有任何意义。您知道它会起作用,因为您的测试会直接调用该函数。
所以我在 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 时,我得到了著名的 'no pending requests to 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 为什么会这样????
您的测试中 $httpBackend.flush();
两次。第一个是可能导致错误的那个。删除该行。在完成可冲洗的操作之前,您不想 flush()
。
此外,您正在监视您正在测试的方法。也删除该行,或者至少将其更改为:
spyOn(controller, 'saveUser').and.callThrough();
监视那个方法实际上没有任何意义。您知道它会起作用,因为您的测试会直接调用该函数。