【发布时间】:2015-11-16 03:48:38
【问题描述】:
单击按钮时,我会进行 jsonp 调用。
function clickHandler(e) {
e.preventDefault();
var url = "some.url.with?params";
$http.jsonp(url).success(function () {$scope.success();})
.error(function () {$scope.failure();});
}
测试:
$httpBackend.expectJSONP(this.url + '&' + $.param(this.params)).respond({status: 200});
$('button').click();
$rootScope.$digest(); // this was suggested in few answers, doesn't work for me though
$httpBackend.flush();
但我不断收到 No pending requests to flush failure。
在 JSONP 调用的情况下我们需要做一些不同的事情吗?这种格式在其他任何地方都有效。
PS:是的,我打了电话(很多问题,人们实际上都在打电话或触发触发事件的操作)。至少,我看到代码到达了我在代码中提出请求的那一行。
【问题讨论】:
-
clickHandler() 在控制器中吗?它是如何绑定到按钮的? ng-click?
-
是的,它在控制器内并通过 ng-click 绑定
-
我认为在您的测试中获取控制器实例会更好,然后您可以调用
controller.clickHandler()而不是$('button').click()。如果您绝对必须使用$('button').click(),您可以尝试将$rootScope.$digest()更改为$rootScope.$apply,但我认为这不会有帮助。 -
你不会相信我都试过了。它工作正常。我试图从指令的范围内直接访问该方法,不起作用。
标签: javascript angularjs unit-testing jsonp httpbackend