我试图在点击链接后验证是否调用了某个函数。在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();
});
});
答案 0 :(得分:2)
通常将测试分为单元测试和端到端测试。
在单元测试中,您可以测试组件,控制器,服务......您可以测试控制器是否正确调用其依赖项。
用户界面(点击,填充输入,...)主要在浏览器中测试 - 使用selenium或http://www.protractortest.org/#/(如果是Angular)
在您的示例中,您创建了一个控制器实例,但没有模板,没有DOM(仅限于jasmine / test-runner DOM)。所以它不会起作用。