【问题标题】:Requirejs and Karma: cannot detect the source fileRequirejs 和 Karma:无法检测到源文件
【发布时间】:2014-04-09 05:22:22
【问题描述】:

我正在尝试使用 Karma 和 requirejs 测试我的 Angular 脚本,但我不断收到此错误

Firefox 28.0.0 (Mac OS X 10.9) 错误:“/base/app/public/js/test/unit/controllersSpec.js 没有时间戳!”

警告[网络服务器]:404:/base/app/public/js/test/unit/controllersSpec.js

Firefox 28.0.0 (Mac OS X 10.9) 错误 错误:脚本错误:test/unit/controllersSpec http://requirejs.org/docs/errors.html#scripterror 在 /Users/Masanori/Desktop/FlippySurvey/node_modules/requirejs/require.js:166

我尝试以不同的方式更改 baseUrl,但我仍然不断收到错误消息。 有人可以帮我解决这个问题吗?我会感谢你的帮助!

我的目录结构是这样的

app/
   public/
       vendors/
            ....
       js/
          controllers.js
          controllers/
                   mainctrl.js
test
   unit
        controllersSpec.js
   karma.conf.js
   test-main.js

这是我的 test-main.js 和 karma.conf.js

test-main.js'

var allTestFiles = [];
var TEST_REGEXP = /(spec|test)\.js$/i;

var pathToModule = function(path) {
  return path.replace(/^\/base\//, '').replace(/\.js$/, '');
};

Object.keys(window.__karma__.files).forEach(function(file) {
  if (TEST_REGEXP.test(file)) {
    // Normalize paths to RequireJS module names.
    allTestFiles.push(pathToModule(file));
  }
});

require.config({
  paths:{
    'angular'     : '/base/app/public/vendors/angular/angular',
    'angularMocks': '/base/app/public/vendors/angular-mock/angular-mock',
    'domReady'    : '/base/app/public/vendors/requirejs-domready/domready',
    'angularRoute': '/base/app/public/vendors/angular-route/angular-route'
  },

  baseUrl: '/base/app/public/js',

  shim: {
    'angular' :{'exports':'angular'},
    'angularRoute' :['angular'],
    'angularMocks':{
      deps: ['angular'],
      'exports':'angular.mock'
    }
  },

  deps: allTestFiles,

  callback: window.__karma__.start
});

karma.conf.js

module.exports = function(config) {
     config.set({

    basePath: '',

    frameworks: ['jasmine', 'requirejs'],

    files: [
      {pattern: 'unit/*.js', included: false},
      {pattern: 'unit/**/*.js', included: false},
      {pattern: '../app/public/js/**/*.js', included: false},
      {pattern: '../app/public/js/*.js', included: false},
      {pattern: '../app/public/vendors/**/*.js', included: false},
      'test-main.js'
    ],

    exclude: [

    ],

    preprocessors: {

    },

    reporters: ['progress'],

    port: 9876,

    colors: true,

    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
    logLevel: config.LOG_INFO,

    autoWatch: true,

    browsers: ['Firefox'],

    singleRun: false
  });
};

【问题讨论】:

    标签: javascript angularjs unit-testing requirejs karma-runner


    【解决方案1】:

    好的。

    我只需要删除一些代码,当您使用 requirejs 执行 karma init 时,Karma 会自动插入这些代码。


    在 test-main.js 中

    var pathToModule = function(path) {
      return path.replace(/^\/base\//, '').replace(/\.js$/, '');
    };
    Object.keys(window.__karma__.files).forEach(function(file) {
       if (TEST_REGEXP.test(file)) {
       // Normalize paths to RequireJS module names.
        allTestFiles.push(pathToModule(file));
       }
    });
    

    删除 pathToModule

    Object.keys(window.__karma__.files).forEach(function(file) {
       if (TEST_REGEXP.test(file)) {
          allTestFiles.push(file);
        }
    });
    

    现在 karma 读取所有测试文件!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多