我试图测试我的一个指令,但我无法解决为什么我的范围对象未定义。
define(["require", "exports", 'angular', 'directives', "angularMocks", "chartApp"], function (require, exports, angular, Directives) {
"use strict";
describe('board controls', function () {
describe('task filter', function () {
var $compile;
var $rootScope;
var scope;
var element;
beforeEach(angular.mock.module('chartApp'));
beforeEach(angular.mock.module('partials/directives/board-controls.html'));
beforeEach(inject(function (_$compile_, _$rootScope_) {
$compile = _$compile_;
$rootScope = _$rootScope_;
scope = $rootScope.$new();
expect(scope).toBeDefined();
element = $compile('<board-controls></board-controls>')(scope);
scope.$digest();
}));
it('displays modal', function () {
scope.showChildFilters();
});
});
});
});
在it('displays modal')...
部分Karma输出:
TypeError: undefined is not an object (evaluating 'scope.showChildFilters')
但在beforeEach(...)
部分似乎有效。我无法理解为什么这不起作用。
答案 0 :(得分:0)
您需要更改为
it('displays modal', function () {
//scope.showChildFilters();
var isolateScope = element.isolateScope(); //I prefer to name isolateScope
isolateScope.$apply() //cause scope to digest and watch and all that
isolateScope.showChildFilters();
});
这也是对你的问题非常详细的回答。 Testing element directive - can't access isolated scope methods during tests