所以我在茉莉花中进行了以下测试:
$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为什么会这样?????
答案 0 :(得分:2)
你的测试中有$httpBackend.flush();
两次。第一个是可能导致错误的那个。删除该行。在你做了可以冲洗的事情之前,你不想flush()
。
另外,你正在监视你正在测试的方法。删除该行,或至少将其更改为:
spyOn(controller, 'saveUser').and.callThrough();
窥探那种方法实际上没有意义。你知道它会起作用,因为你的测试会直接调用它。