我必须根据父作用域函数测试一个指令进行初始化:
.directive('droppedSnippet', function () {
return {
templateUrl: 'views/dropped-snippet.html',
restrict: 'E',
scope: {
id: '@',
get: '&'
},
link: function postLink(scope, element, attrs) {
var s = scope.get({id: attrs.id});
element.find('.title').text(s.title);
}
};
});
上下文,如果匆忙则跳过:为了更容易想象(并在需要时讨论整个想法),在drop事件中将此指令添加到文档中。该指令代表嵌入代码。在链接指令期间,仅知道其id
,应该从控制器获取其内容并填充其标记。
为了模拟控制器创建的父作用域,我设置了以下模拟:
beforeEach(inject(function ($rootScope, $compile) {
scope = $rootScope.$new();
scope.foo = function() {
return {
title: 'test title',
code: 'test <code>'
};
};
spyOn(scope, 'foo').andCallThrough();
element = angular.element('<dropped-snippet id="3" get="foo(id)"></dropped-snippet>');
element = $compile(element)(scope);
}));
it('calls the scope function', function() {
expect(scope.foo).toHaveBeenCalledWith(3);
});
测试失败,未调用scope.foo
。代码可以在服务器上运行。我无法找到类似的例子。这是在父作用域中模拟函数的正确方法吗?
答案 0 :(得分:1)
尝试expect(scope.foo).toHaveBeenCalledWith("3");
或者将其转换为数字,@将其视为字符串