0
我目前正在嘗試測試我的角度應用程序,我遇到了一個問題,測試失敗,但代碼正在工作......我無法獲得控制器實際上被創建。我通過吞噬與Phantomjs一起使用Karma。我得到的錯誤是這樣的:
Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope <-QueryBuilderController
這裏是我的測試:
describe('QueryBuilderController', function(){
var controller;
beforeEach(function(){
bard.appModule('app.query');
bard.inject(this,'$controller');
controller = $controller('QueryBuilderController');
});
it('should exist', function(){
expect(controller).to.exist;
});
});
關於這個有趣的是,我有一個幾乎相同的測試,做的工作和負荷,看起來像這樣:
describe('ShellController', function(){
var controller;
beforeEach(function(){
bard.appModule('app.shell');
bard.inject('$controller');
controller = $controller('ShellController');
});
it('should exist', function(){
expect(controller).to.exist;
});
});
這裏是QueryBuilderController:
(function() {
'use strict';
angular.module('app.query')
.controller('QueryBuilderController', QueryBuilderController);
QueryBuilderController.$inject = ['QueryFactory', '$scope'];
function QueryBuilderController (QueryFactory, $scope){
var vm = this;
vm.displayQuery = true;
}
})();
這裏是控制器所屬的模塊:
(function() {
'use strict';
angular
.module('app.query', [
'app.core',
'elasticsearch',
'angular-elastic-builder',
'angularUtils.directives.dirPagination'
]);
})();
這裏是一飲而盡任務:
gulp.task('test', ['vet'], function(done){
startTests(true, done);
});
///////
function startTests(singleRun, done) {
var child;
var excludeFiles = [];
var fork = require('child_process').fork;
var karma = require('karma').server;
var serverSpecs = config.serverIntegrationSpecs;
if (args.startServers) {
console.log('Starting servers');
var savedEnv = process.env;
savedEnv.NODE_ENV = 'dev';
savedEnv.PORT = 8888;
child = fork(config.nodeServer);
} else {
if (serverSpecs && serverSpecs.length) {
excludeFiles = serverSpecs;
}
}
karma.start({
configFile: __dirname + '/karma.conf.js',
exclude: excludeFiles,
singleRun: !!singleRun
}, karmaCompleted);
////////////////
function karmaCompleted(karmaResult) {
console.log('Karma completed');
if (child) {
console.log('shutting down the child process');
child.kill();
}
if (karmaResult === 1) {
done('karma: tests failed with code ' + karmaResult);
} else {
done();
}
}
}
而且GulpConfig:
module.exports = function(){
var client = './src/client/';
var clientApp = client + 'app/';
var temp = './.tmp/';
var server = './src/server/';
var report = './report/';
var wiredep = require('wiredep');
var bowerFiles = wiredep({devDependencies: true})['js'];
var root = './';
var config = {
// File Paths
temp: './.tmp/',
alljs: [
'./src/**/*.js',
'./*.js'
],
htmlTemplates: clientApp + '**/*.html',
html: clientApp + '**/*.html',
client: client,
index: client + 'index.html',
build: './static/',
fonts: './bower_components/font-awesome/fonts/**/*.*',
images: client + 'images/**/*.*',
js: [
clientApp + '**/*.module.js',
clientApp + '**/*.js',
'!' + clientApp + '**/*.spec.js'
],
templateCache: {
file: 'templates.js',
options: {
module: 'app.core',
standAlone: false,
root: 'app/'
}
},
sass: client + 'styles/styles.sass',
css: [temp + 'styles.css', client + 'assetts/*.css'],
// Bower and NPM locations
bower: {
json: require('./bower.json'),
directory: './bower_components/',
ignorePath: '../..'
},
specHelpers: client +'specHelpers/*.js',
// Node Settings
nodeServer: './src/server/dev_server.js',
port: 3000,
server: server,
// Optimized File Names
optimized: {
app: 'app.js',
lib: 'lib.js'
},
// Packages for bower and NPM
packages: [
'./package.json',
'./bower.json'
],
root: root
};
config.getWiredepDefaultOptions = function(){
var options = {
bowerJson: config.bower.json,
directory: config.bower.directory,
ignorePath: config.bower.ignorePath
};
return options;
};
config.karma = getKarmaOptions();
return config;
///////////////////////////////
function getKarmaOptions() {
var options = {
files: [].concat(
bowerFiles,
config.specHelpers,
clientApp + '**/*.module.js',
clientApp + '**/*.js'
// config.serverIntegrationSpecs
),
exclude: [],
coverage: {
dir: report + 'coverage',
reporters: [
// reporters not supporting the `file` property
{type: 'html', subdir: 'report-html'},
{type: 'lcov', subdir: 'report-lcov'},
{type: 'text-summary'} //, subdir: '.', file: 'text-
summary.txt'}
]
},
preprocessors: {}
};
options.preprocessors[clientApp + '**/!(*.spec)+(.js)'] = ['coverage'];
return options;
}
};
Karma.Conf:
module.exports = function(config){
var gulpConfig = require('./gulp.config')();
config.set({
basePath: './',
files: gulpConfig.karma.files,
exclude: gulpConfig.karma.exclude,
proxies: {
'/': 'http://localhost:8888/'
},
// preprocessors: gulpConfig.karma.preprocessors,
reporters: ['progress', 'coverage'],
coverageReporter: {
dir: gulpConfig.karma.coverage.dir,
reporters: gulpConfig.karma.coverage.reporters
},
// web server port
port: 9876,
plugins: [
'karma-mocha',
'karma-chai',
'karma-sinon',
'karma-sinon-chai',
'karma-phantomjs-launcher',
'karma-coverage'
],
// enable/disable colors in the output (reporters and logs)
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
frameworks: ['mocha', 'chai', 'sinon', 'sinon-chai'],
browsers: ['PhantomJS'],
singleRun: false
});
};
最後但並非最不重要的,項目結構:
Project
|-- gulpfile.js
|-- gulp.config.js
|-- karma.conf.js
|-- package.json
|-- bower.json
`-- src
`-- client
|-- assetts
|-- images
|-- specHelpers
|-- styles
|-- index.html
|-- specs.html
`-- app
|-- angular-elastic-builder.js
|-- app.module.js
|-- blocks
| |-- exception
| | |-- exception-handler.provider
| | |-- exception.js
| | `-- exception.module.js
| |-- logger
| | |-- logger.js
| | `-- logger.module.js
| `-- router
| |-- router.module.js
| `-- router-helper.provider.js
|-- core
|-- dashboard
|-- query
| |-- querybuilder.controller.js
| |-- querybuilder.html
| |-- query.module.js
| `-- querycontroller.spec.js
`-- shell
|-- shell.module.js
|-- shell.controller.spec.js
|-- shell.controller.js
`-- shell.html
對不起,所有的信息,試圖包括所有的相關信息。所有幫助表示感謝,提前謝謝!
更新:當我不使用吟遊詩歌它似乎通過這個,是否有可能是bard.js導致某種問題與我的模塊依賴之一?
/* jshint -W117, -W030 */
describe('QueryBuilderController', function(){
// beforeEach(function(){
// module('app.query');
// bard.inject('$controller');
// controller = $controller('QueryBuilderController');
// });
beforeEach(module('app.query'));
var $controller;
beforeEach(inject(function(_$controller_){
$controller = _$controller_;
}));
it('should exist', function(){
var $scope = {};
var controller = $controller('QueryBuilderController', { $scope: $scope });
expect(controller).to.exist;
});
});
嗯,測試運行時代碼不會被縮小,並且當我沒有運行測試時,實際代碼運行良好。當我手動測試時,它正在被縮小和醜化。我想知道這是否是導致問題的麻煩? –
我從來沒有機會做任何Angular測試,所以我不確定。 – ACIDSTEALTH