我想对一个看起来像这样的指令进行单元测试:
angular.module('myApp', [])
.directive('myTest', function () {
return {
restrict: 'E',
scope: { message: '='},
replace: true,
template: '<div ng-if="message"><p>{{message}}</p></div>',
link: function (scope, element, attrs) {
}
};
});
这是我失败的测试:
describe('myTest directive:', function () {
var scope, compile, validHTML;
validHTML = '<my-test message="message"></my-test>';
beforeEach(module('myApp'));
beforeEach(inject(function($compile, $rootScope){
scope = $rootScope.$new();
compile = $compile;
}));
function create() {
var elem, compiledElem;
elem = angular.element(validHTML);
compiledElem = compile(elem)(scope);
scope.$digest();
return compiledElem;
}
it('should have a scope on root element', function () {
scope.message = 'not empty';
var el = create();
console.log(el.text());
expect(el.text()).toBeDefined();
expect(el.text()).not.toBe('');
});
});
你能发现它失败的原因吗?
相应的jsFiddle
谢谢:)
答案 0 :(得分:4)
console.log((new XMLSerializer()).serializeToString(el.get(0)));
返回
<!-- ngIf: message -->
因为您在validHTML中使用了没有父元素的替换,并且使用了ng-if .So的组合,您可以更改validHTML并将div添加为父级。
或
测试你对el的下一个兄弟的期望
el.next()
将是
<div ng-if="message" message="message" class="ng-scope"><p class="ng-binding">yes</p></div>