Я пытаюсь написать некоторые тесты, чтобы покрыть угловую директиву, которая не имеет указанного контроллера и просто использует ссылку, как показано ниже:
директивный код:
(function () {
'use strict';
angular
.module('pages.projections')
.directive('spPlanProjectionDateFilter', spPlanProjectionDateFilter);
spPlanProjectionDateFilter.$inject = ['projectionsModel',
'moment',
'projectionsService',
'_'];
function spPlanProjectionDateFilter(projectionsModel,
moment,
projectionsService,
_) {
var directive = {
restrict: 'E',
link: linker,
templateUrl: 'app/pages/projections/sp-plan-projection-date-filter.html',
scope:{}
};
return directive;
function linker(scope, elem) {
scope.dateFrom = moment();
В моих тестах я хочу, чтобы chect dateFrom был равен сегодняшней или другой дате после некоторого действия....
тестовый код:
describe.only('spPlanProjectionDateFilter', function () {
'use strict';
var $compile, $rootScope;
var element = '<sp-plan-projection-date-filter></sp-plan-projection-date-filter>';
var scope;
beforeEach(module('pages.projections'));
beforeEach(module('app.services'));
beforeEach(inject(function (_$compile_, _$rootScope_, _$controller_) {
$compile = _$compile_;
$rootScope = _$rootScope_;
scope = $rootScope.$new();
}));
describe('when initialised', function () {
it('should set dateFrom to today', function(done) {
var compileDirective = $compile(element)(scope);
scope.$digest();
console.log(compileDirective);
expect(scope.dateFrom).equals('ddd');
});
});
});
Почему мне приходится свертывать весь путь до области. $$ childHead, чтобы увидеть свойства и функции, которые я висит у моего компоновщика? Т.е. когда я нахожусь в консоли, и я опрошу переменную области видимости, я не вижу никаких свойств и функций, и я вижу их только в том случае, когда я расширяю объект $$ childScope в моей переменной области видимости. Я думал, что смогу утверждать свою переменную "scope", которую я имею в тесте? Есть ли более чистый способ проверить эту директиву?
ура
Похоже, вам просто нужно получить доступ к изолированной области действия. Должно быть так просто:
var compileDirective = $compile(element)(scope);
var isolateScope = compileDirective.isolateScope();
Затем вы можете получить доступ к изолятуScope из своих утверждений.
expect(isolateScope.dateFrom).equals('ddd');