Я пытаюсь написать модульный тест для директивы, которая использует md-select
. Я могу настроить таргетинг на элемент md-select
, но не могу получить доступ к элементам md-option
.Угловой js, проверяющий директиву с опцией md
directive.js:
angular.module('myApp')
.directive('myDirective', function ($rootScope) {
return {
restrict: 'A',
scope: {
foo: '=',
},
templateUrl: 'static/partials/my-directive.tmpl.html',
link: function (scope, element, attrs) {
...
scope.options = [
{
name: 'Download', fn: function() {
console.log('download');
},
},
{
name: 'Share', fn: function() {
console.log('share');
},
},
];
}
};
});
directive.tmpl.html:
<md-input-container>
<md-select ng-model="option" placeholder="Options">
<md-option ng-value="opt" ng-click="opt.fn()" ng-repeat="opt in options">{{ opt.name }}</md-option>
</md-select>
</md-input-container>
directive.spec.js
describe('My Directive', function() {
var elm, scope;
beforeEach(module('scriptspeakerApp'));
beforeEach(module('templates'));
beforeEach(inject(function ($rootScope, $compile) {
elm = angular.element(
'<div my-directive foo="script"></div>'
);
$scope = $rootScope.$new();
$scope.foo = 'bar';
elm = $compile(elm)($scope);
$scope.$digest();
}));
it('should have one select element and 2 md-option elements', function() {
var select = elm.find('md-select');
select.triggerHandler("click");
var options = elm.find('md-option');
console.log('options', options);
// output: Object{}
});
Я понимаю, что Angular Material
загружает md-option
элементов на внизу страницы. Означает ли это, что параметры не могут быть доступны в рамках директивы, и вместо этого требуется тест e2e?
Я заметил это было опубликовано некоторое время назад, разве вы случайно решили это? У меня проблемы с тем же. – Archmede
Я считаю, что я решил аналогичную проблему, но с md-dialog. Взгляните на мой вопрос/ответ - http://stackoverflow.com/questions/36149361/testing-component-that-opens-md-dialog/38181656#38181656 –