我正在尝试使用requirejs配置我的业力茉莉花单元测试。但是每次我运行它时,都会出现以下错误:
Chrome 34.0.1847 (Mac OS X 10.9.2) ERROR Uncaught Error: Mismatched anonymous define() module: function (angular){ describe('Unit: Testing RequireJS', function(){ var ctrl; var scope; var rootScope; beforeEach(angular.mock.module('wsaApp')); beforeEach(angular.mock...<omitted>...ch
以下是differenr文件: spec文件:
define(['angular'], function(angular){ describe('Unit: Testing RequireJS', function(){ var ctrl; var scope; var rootScope; beforeEach(angular.mock.module('wsaApp')); beforeEach(angular.mock.inject(function($rootScope){ scope = $rootScope.$new(); rootScope = $rootScope; })); }); });
main.js
require.config({ paths: { /* ABC order */ 'angular': 'vendor/angular/1.2.0/angular.min' }, shim: { 'angular': { exports: 'angular' }, 'app/controllers': { deps: ['angular'] } } });
test-main.js
// This creates an array of all the files that Karma finds with a suffix of // Test.js (eg utilsTest.js) to be added to the Require JS config below var tests = [], file; for (file in window.__karma__.files) { if (window.__karma__.files.hasOwnProperty(file)) { if(/spec\.js$/.test(file)) { tests.push(file); } } } requirejs.config({ baseUrl: '/base/public/javascripts/', // Karma serves files from /base/<your-base-path> paths: { /* ABC order */ 'angular': 'vendor/angular/1.2.1/angular.min' }, shim: { 'angular': { exports: 'angular' }, 'app/controllers': { deps: ['angular'] }, }, deps: tests, // add tests array to load our tests callback: window.__karma__.start // start tests once Require.js is done });
karma.conf.js
//Karma configuration module.exports = function (config) { config.set({ // base path, that will be used to resolve files and exclude basePath: '', // Fix for "JASMINE is not supported anymore" warning frameworks: ["jasmine", "requirejs"], // list of files / patterns to load in the browser files: [ 'vendor/angular/1.2.1/angular.js', 'jquery-1.7.1.min.js', 'test/spec/**/*.js', 'test/test-main.js' ], preprocessors: { 'app/**/*.js': 'coverage' }, // list of files to exclude exclude: ['app/main.js'], // test results reporter to use // possible values: dots || progress || growl reporters: ['progress', 'coverage'], coverageReporter : { type: 'html', dir: 'coverage/' }, // web server port port: 9876, // cli runner port runnerPort: 9100, // enable / disable colors in the output (reporters and logs) colors: true, // level of logging // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG logLevel: config.LOG_INFO, // enable / disable watching file and executing tests whenever any file changes autoWatch: false, // Start these browsers, currently available: // - Chrome // - ChromeCanary // - Firefox // - Opera // - Safari (only Mac) // - PhantomJS // - IE (only Windows) browsers: ['Chrome'], browserNoActivityTimeout: 100000, // If browser does not capture in given timeout [ms], kill it captureTimeout: 20000, // Continuous Integration mode // if true, it capture browsers, run tests and exit singleRun: true }); }
我尝试了其他线程中提到的不同选项,但似乎没有任何效果。
最终,我解决了所有问题,并能够通过requirejs配置成功运行茉莉花测试。我最先提到了业力配置中的所有依赖项,并将它们标记为included: false独占,以便它们通过我的test-config文件由requirejs加载。
included: false
files: [ {pattern: 'vendor/angular/1.2.1/angular.js', included: false}, {pattern: 'vendor/angular/1.2.1/angular-mocks.js', included: false}, {pattern: 'vendor/angular/1.2.1/angular-*.js', included: false}, {pattern: 'vendor/bootstrap/bootstrap-*.js', included: false}, {pattern: 'jquery-1.7.1.min.js', included: false}, {pattern: 'app/app.js', included: false}, {pattern: 'app/**/*.js', included: false}, {pattern: 'test/test-config.js', included: true}]
只有test-config通过业力加载,所有其他配置都包含在业力配置中,但标记为false。
另外,我必须在我的规范文件中加载app.js,以便加载模块和控制器:
define(['angular-mocks', 'jquery', 'app/app'], function(angularmocks, $, app){ describe..... }