Karma测试角度控制器

时间:2015-03-27 04:16:52

标签: angularjs karma-jasmine

我已经开始学习如何在控制器上正确测试并遇到以下脚本。

http://www.yearofmoo.com/2013/01/full-spectrum-testing-with-angularjs-and-karma.html

it('should have a properly working VideosCtrl controller', inject(function($rootScope, $controller, $httpBackend) {
    var searchTestAtr = 'cars';
    var response = $httpBackend.expectJSONP(
      'https://gdata.youtube.com/feeds/api/videos?q=' + searchTestAtr + '&v=2&alt=json&callback=JSON_CALLBACK');
    response.respond(null);

    var $scope = $rootScope.$new();
    var ctrl = $controller('VideosCtrl', {
      $scope : $scope,
      $routeParams : {
        q : searchTestAtr
      }
    });
  }));

我有点困惑... expectedJSON位于以下API页面中:

https://docs.angularjs.org/api/ngMock/service/$httpBackend

我很困惑只是想知道在这里测试了什么,我可以看到那里的描述,但仍然失去了......这里的预期是什么?

2 个答案:

答案 0 :(得分:2)

与任何单元测试一样,您安排行为然后断言。

对于上述测试,排列和行为的部分是不言而喻的,但断言部分可能并不明显。测试只是验证在创建控制器时是否发送了搜索请求。

如果查看视频控制器的控制器代码

 $youtube.query($scope.q, true, function(q, videos) {
      $scope.videos = videos;
      $scope.onReady();
    });

这可以确认。

断言部分由$httpBackend.expectJSONP完成。此设置告诉karma验证是否对特定URL进行了GET请求。这里的网址是搜索字词为cars的Google搜索API。

该测试基本上设置了一个模拟后端并断言它被调用。

答案 1 :(得分:2)

此测试没有明确的断言,但如果构造控制器实例因任何原因抛出异常,它将失败。

请记住,如果断言失败,则会抛出异常。测试跑步者只需运行您的测试功能:

 try {
     runTest();
 } catch (e) {
     markTestFailed(e);
 }

因此,如果您的测试代码因任何原因抛出异常,则测试将失败。