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