我刚刚杀死了几个小时试图解决这个问题。在控制器中,我调用一个在页面加载时发出 HTTP 请求的方法:
$scope.getPosts = function() { /* call to service */ };
/// Call it immediately
$scope.getPosts();
我希望在我的单元测试中做到这一点:
$httpBackend.expectGET("/posts?bar=bar&foo=foo").respond(200, []);
但业力报告
Error: Unexpected request: GET /posts?bar=bar&foo=foo
No more request expected in ...
这没有任何意义。我在测试中尝试了何时/何地调用 expectGET/create 控制器的所有组合,但没有任何帮助。然后我意识到我有另一个控制器可以获取一些关于页面加载和工作测试的数据。不同之处在于,必须存在路由参数才能使 HTTP 请求发生。所以我把电话转到
if ($routeParams.foo) {
$scope.getPosts();
}
并在测试中注入 foo 参数。它通过了!显然没有人希望访问者在 URL 中看到这样的东西。使用 whenGET 也可以让它通过。
有人可以帮忙解决这个问题吗?大约 2 年前我发现一个人问这个问题,但他没有得到任何答案(除了我的被删除)。