如何窥探从UI点击的链接调用的控制器功能?

时间:2015-07-10 06:01:18

标签: angularjs jasmine

我试图在点击链接后验证是否调用了某个函数。在Jasmine测试中使用jQuery调用click,但看起来范围与测试中的控制器不同。在这种情况下如何进行测试?有问题的代码可以在http://plnkr.co/edit/yqKme59WD9isrZTCutKB?p=preview找到。

describe('Testing a Hello World controller', function() {
  var $scope;
  var ctrl;

  //you need to indicate your module in a test
  beforeEach(module('plunker'));

  beforeEach(inject(function($rootScope, $controller) {
    $scope = $rootScope.$new();

    ctrl = $controller('MainCtrl as mc', {
      $scope: $scope
    });

    spyOn(ctrl, 'loadData').and.callThrough();
  }));

  it('should call load data', function() {
    ctrl.loadData();
    console.log("1:" + ctrl.name);
    expect(ctrl.loadData).toHaveBeenCalled();
  });

  it('should call load data after link cliked', function() {
    $('#change-name')[0].click(); 
    console.log("2:" + ctrl.name);
    expect(ctrl.loadData).toHaveBeenCalled();
  });
});

1 个答案:

答案 0 :(得分:2)

通常将测试分为单元测试和端到端测试。

在单元测试中,您可以测试组件,控制器,服务......您可以测试控制器是否正确调用其依赖项。

用户界面(点击,填充输入,...)主要在浏览器中测试 - 使用selenium或http://www.protractortest.org/#/(如果是Angular)

在您的示例中,您创建了一个控制器实例,但没有模板,没有DOM(仅限于jasmine / test-runner DOM)。所以它不会起作用。