2015-11-05 84 views
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; 
    }); 
}); 

回答

0

您是否正確注入您的依賴關係?按照docs你需要做的是這樣的:

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

我只遇到過當,如果我沒有正確地申報自己的依賴我的代碼已經作壓縮這個問題,但我不知道是否是同樣的事情在你的情況。

+0

嗯,測試運行時代碼不會被縮小,並且當我沒有運行測試時,實際代碼運行良好。當我手動測試時,它正在被縮小和醜化。我想知道這是否是導致問題的麻煩? –

+0

我從來沒有機會做任何Angular測試,所以我不確定。 – ACIDSTEALTH

相關問題