我正在使用 Karma 测试一个非常简单的指令:
.directive('a', function() {
return {
restrict: 'A',
controller: function() {
}
}
})
.directive('b', function() {
return {
restrict: 'E',
require: ['^a'],
link: function() {
}
}
})
它在 HTML 页面中工作,但使用业力我得到以下错误:
错误:[$compile:ctreq] 指令“b”所需的控制器“a”找不到!
在业力/茉莉花测试中使用以下代码:
var html = angular.element('<div a />\
<b>directive content</b>\
</div>')[0];
body.appendChild(html);
$compile(html)(scope);
有任何想法吗 ?
以下是完整文件:
业力.conf.js
// Karma configuration
// Generated on Fri Feb 26 2016 20:08:50 GMT+0100 (CET)
module.exports = function(config) {
config.set({
// base path that will be used to resolve all patterns (eg. files, exclude)
basePath: '',
// frameworks to use
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
frameworks: ['jasmine'],
// list of files / patterns to load in the browser
files: [
'node_modules/angular/angular.js',
'node_modules/angular-mocks/angular-mocks.js',
'directives.js',
'test.spec.js'
],
// list of files to exclude
exclude: [
],
// preprocess matching files before serving them to the browser
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
preprocessors: {
'src/!(*.mock|*.spec).js': ['coverage']
},
coverageReporter: {
type : 'html',
// output coverage reports
dir : 'coverage/'
},
// test results reporter to use
// possible values: 'dots', 'progress'
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
reporters: ['progress', 'coverage'],
// web server port
port: 9876,
// enable / disable colors in the output (reporters and logs)
colors: true,
// level of logging
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
logLevel: config.LOG_INFO,
// enable / disable watching file and executing tests whenever any file changes
autoWatch: true,
// start these browsers
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
browsers: ['Chrome', 'Firefox'],
// Continuous Integration mode
// if true, Karma captures browsers, runs the tests and exits
singleRun: false,
// Concurrency level
// how many browser should be started simultaneous
concurrency: Infinity
})
}
指令.js
(function(angular) {
angular.module('directives', [])
.directive('a', function() {
return {
restrict: 'A',
controller: function() {
}
}
})
.directive('b', function() {
return {
restrict: 'E',
require: ['^a'],
link: function() {
}
}
});
})(angular);
指令.spec.js
describe('Simple test', function() {
var body, $compile, $rootScope, scope;
beforeEach(module('directives'));
beforeEach(inject(['$compile', '$rootScope', function(_$compile, _$rootScope) {
$compile = _$compile;
$rootScope = _$rootScope;
scope = $rootScope.$new();
body = document.querySelector('body');
}]));
it('should work', function() {
var html = angular.element('<div a />\
<b>directive content</b>\
</div>')[0];
body.appendChild(html);
$compile(html)(scope);
});
});