Неизвестный поставщик: $ scopeProvider <- $ scope <- QueryBuilderController

0

В настоящее время я пытаюсь проверить свое угловое приложение, и я столкнулся с проблемой моего теста, но код работает... Я не могу заставить контроллер фактически быть создан. Я использую Карму с Phantomjs через глоток. Ошибка, которую я получаю, такова:

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

Извините за всю информацию, попытался включить всю относительную информацию. Вся помощь приветствуется, спасибо заранее!

UPDATE: Когда я не использую бард, кажется, что это прошло, возможно ли, что 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;
  });
});
Теги:
testing
gulp
phantomjs
karma-runner

1 ответ

0

Правильно ли вы вводите свои зависимости? Согласно документам, вам нужно сделать что-то вроде этого:

angular.module('myApp', [])
.controller('MyController', ['myService', function (myService) {
  // Do something with myService
}]);

Я только столкнулся с этой проблемой, когда мой код был уменьшен, если я не объявлял свои зависимости правильно, но мне интересно, не так ли это в вашем случае.

  • 0
    Хм, код не минимизируется во время выполнения теста, а сам код работает нормально, когда я не запускаю тесты. Когда я проверяю его вручную, он минимизируется и увеличивается. Интересно, это проблема барда?
  • 0
    У меня никогда не было шансов провести какие-либо тесты Angular, поэтому я не уверен.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню