Я уже рассмотрел this Q & Связанный с директивами выделенные области, которые помогли мне разрешить тестирование атрибута, который использовал свойство '@'
; но мне сложно тестировать атрибуты, которые используют свойство '='
.Тестирование атрибута изолированного объема по директиве
Рассмотрим (от моей директивы называется предстоящая):
return {
restrict: 'A',
link: link,
scope: {
upcoming: '@',
patientDetails: '='
}
};
В моем тесте для upcoming
я могу получить доступ к нему (с угловым 1,2 года) с помощью функции isolateScope()
следующим образом:
elm = angular.element('<div upcoming="remembered" patient-details="patientDetails"></div>');
// Compiles the directive and links it to the scope
$compile(elm)(scope);
scope.$digest();
isolateScope = elm.isolateScope();
И в тестах я могу это сделать:
it("should have attribute 'upcoming' attached to isolate scope", function() {
expect(isolateScope.upcoming).toBeDefined();
expect(isolateScope.upcoming).toBe('remembered');
});
Но если я pproach другое свойство таким же образом, я получаю ошибку undefined
. Затем я попытался это:
// Retrieve the target html - remembered.html
beforeEach(inject(function ($compile) {
patient = {
name: 'Lorem Ipsum',
readyForRefill: 1,
progressCount: 2,
upcomingCount: 3,
taggedCount: 4,
expiringCount: 5,
oneRefillRemaining: 9000
};
elm = angular.element('<div upcoming="remembered" patient-details="patient"></div>');
// Compiles the directive and links it to the scope
$compile(elm)(scope);
scope.$digest();
isolateScope = elm.isolateScope();
isolateScope.patientDetails = patient;
}));
Тест:
it("should have attribute 'patientDetails' attached to isolate scope", function() {
expect(isolateScope.patientDetails).toBeDefined();
});
проходит, но я чувствую, что это тестирование не то.
Может ли это пояснить это для меня, пожалуйста?
EDIT
Делать то, что tasseKATT предложил решить эту проблему, но случилось сломать 5 других тестов. Эти тесты в основном исследовали фактический загружаемый шаблон и определили, какое содержимое они имели. Например:
it("ul should contain 4 li", function() {
var li = elm.find('li');
expect(li.length).toBe(4);
});
больше не действует как elm
элемент теперь <div upcoming="remembered" patient-details="patient"></div>
HTML, в отличие от одного загруженного с помощью шаблона:
<p><a href=""><b>Sign in</b></a> to view your full <br>prescription statuses.</p>
<ul>
<li><span>{{patientDetails.readyForRefill}}</span> Prescriptions Ready for Refill</li>
<li><span>{{patientDetails.readyForRefill}}</span> ReadyFill<sup>®</sup>
<li><span>{{patientDetails.expiringCount}}</span> Expiring Prescriptions</li>
<li><span>{{patientDetails.oneRefillRemaining}}</span> Prescriptions with 1 Refill Left</li>
</ul>
Есть ли прочь загрузить как правильно? Хотя стоит отметить, что в зависимости от того, кто вступает в систему, шаблон изменится, так что это сделает любую попытку подсчета div и тэгов, не имеющих отношения к тестам?
Благодаря
Это решило мою проблему, но случилось, чтобы сломать некоторые другие тесты - см. Мое редактирование относительно того, что он делает – Katana24
Я добавил обновление к своему ответу. – tasseKATT
Я сделал то, что вы сказали, но тесты все еще терпят неудачу на основе предыдущих исправлений - чтобы обойти это, мне придется загружать его в предыдущем порядке, но создать другой элемент для его размещения - хороший или плохой? – Katana24