【问题标题】:karma error 'There is no timestamp for'业力错误'没有时间戳'
【发布时间】:2013-12-22 19:21:15
【问题描述】:

试图让 karma 与 requirejs 一起工作。我不明白为什么在运行 Karma 时会出现所有这些错误:

ERROR: 'There is no timestamp for /base/test/mainSpec.js?bust=1387739317116!'
ERROR: 'There is no timestamp for /base/app/main.js?bust=1387739317116!'
ERROR: 'There is no timestamp for /base/bower_components/jquery/jquery.js?bust=1387739317116!'

当我进入检查器中的网络选项卡时,所有文件都在那里,没有 404。

我有点困惑,因为 karma 似乎在寻找“基本”目录,但我的项目中没有“基本”目录。根据业力文档:

Karma 提供 /base 目录下的文件。所以,在服务器上 对文件的请求将在 http://localhost:9876/base/*。 baseUrl 的 Require.js 配置给出 使用相对路径加载的模块的起始上下文。什么时候 为需要启动的 Karma 服务器设置此值 /根据。我们希望我们的测试的 baseUrl 与 我们在 src/main.js 中的基本 url,因此相对需要在 源不需要改变。所以,因为我们希望我们的基本网址位于 src/,我们需要写/base/src。

这至少可以说令人困惑。我的 main.js 文件中是否应该有一个指向“/b​​ase”的 baseUrl 配置?

【问题讨论】:

    标签: requirejs karma-runner


    【解决方案1】:

    注意:这篇文章在 2014 年 1 月 16 日由 Karma 有效。我不确定该库的当前状态,也许他们修复了奇怪的配置逻辑并添加了有意义的错误消息。如果没有,那么这篇文章可能对修复与 Karma 相关的配置问题很有帮助。

    此类错误是由配置错误引起的。您应该将测试使用的所有内容添加到配置文件中的 patterns 文件中。

    例如:

    module.exports = function (config) {
        config.set({
            basePath: './',
            frameworks: ['jasmine', 'requirejs'],
            files: [
                {pattern: 'test/bootstrap.js', included: true},
                {pattern: 'test/**/*.js', included: false},
                {pattern: 'src/**/*.js', included: false},
                {pattern: 'vendor/**/*.js', included: false}
            ],
            exclude: [
    
            ],
            reporters: ['progress'],
            port: 9876,
            colors: true,
            logLevel: config.LOG_INFO,
            autoWatch: true,
            browsers: ['Firefox'],
            captureTimeout: 6000,
            singleRun: false
        });
    };
    

    在此示例中,bootstrap.js 是 HTML 中由 Karma 编写的唯一文件 included其他文件是依赖项bootstrap.js 中的代码加载。模式顺序非常重要,遗憾的是它与逻辑相去甚远:下一个模式不会覆盖前一个。因此,如果我将test/**/*.js 模式作为第一个,test/bootstrap.js 作为第二个,它将无法工作,因为不包含引导程序。在这些情况下,Karma 会向您发送 "empty testsuite" 消息,如果您不知道如何配置它,这将毫无用处...

    如果您的测试尝试使用您在 Karma 配置文件中提供的模式未涵盖的文件,那么您将收到 "There is no timestamp for xy" 错误消息,这与前面提到的 "empty testsuite" 非常相似。如果您不了解该系统,您将不会有任何线索,它意味着什么,或者您必须做什么才能修复它......

    配置对象的exclude 部分用于文件,这些文件已添加到文件模式中以供包含,但您不想在测试中包含或使用它们。这些可以是例如 requirejs 用于开发和生产环境的配置文件等...

    【讨论】:

      【解决方案2】:

      对我来说,设置basePath: 'base' 而不是baseUrl: '/base' 只是犯了一个错误。

      baseUrl: '/base'ftw!

      【讨论】:

      • 你能否澄清你描述中“basePath”和&&“baseUrl”之间的对立——以及如果你的上下文是karma.conf.js——或者——test-main.js
      • 我很高兴 OP 找到了解决他特定问题的方法,但对我来说,正确的解决方案是在我的 require.config.js 中分配 "baseUrl: '/base'文件。我使用的是 grunt-karma,它在 grunt config 对象中通过 _ configFile: 'karma.conf.js'_ 使用 karma.config。无论如何要确保分配 '/base'baseUrl 您使用的任何地方,并且一如既往...错别字是敌人!
      • 这为我解决了这个问题,应该得到更多的 IMO 支持。如果您根本没有获得文件,那是一个单独的问题,而这个答案实际上回答了这个问题!
      • 这与时间戳错误消息有何关系? -- 所有文件都被正确地提供了 AFAICT,但我为每个文件保留了这个时间戳消息。我的baseUrl 配置正确。
      【解决方案3】:

      basePath 用于标识项目相对于配置文件 (karma.conf.js) 的根目录。看看这个例子:https://github.com/karma-runner/karma/blob/v0.8.5/test/client/karma.conf.js

      在浏览器中,我也收到有关时间戳的错误,但它不会影响任何事情。测试工作正常。我想这应该是一个警告而不是一个错误:-)

      【讨论】:

        【解决方案4】:

        Jeff 说得对,您应该排除应用程序的 requirejs 配置文件,因为“我们不想在测试中实际启动应用程序。[LINK]”。

        test-main.js 配置文件是与您的应用使用的 requirejs 配置文件不同的文件,在您的情况下可能是 config.jsmain.js,具体取决于您配置 requirejs 的位置.

        它们都配置路径和依赖项(可以指定大致相同的),但前者是为您编写的测试提供 requirejs 支持。整个 requirejs 设置与您在应用程序中使用的 requirejs 是分开的。所以不要包括后者,它会混淆 Karma。

        上面的链接是一个带有 its requirejs 演示的工作 Karma,请查看。

        【讨论】:

          【解决方案5】:

          在尝试了所有发布在不同来源的解决方案后,我终于把它修复了。在这里查看:Make "no timestamp" error configurable #6

          karma.conf.js 文件的问题示例:

          client: {
            requireJsShowNoTimestampsError: '^(?!.*(^/base/app/node_modules/))'
          }
          

          【讨论】:

            【解决方案6】:

            在我的 karma.conf.js 文件中,我只是排除了包含我的 require.config 函数的文件(在我的情况下恰好是 config.js)并且错误消失了。

              exclude: [
                'app/config.js',
                'bower_components/jasmine/**/*.js'
              ],
            

            【讨论】:

              【解决方案7】:

              当相关文件实际上不存在时,也会发生此错误!

              因此请检查以确保您收到此错误的文件确实存在于您的项目中!

              一旦您发现这些文件是什么,您可以使用karma.conf.js 中类似的模式忽略它们,如果在某些情况下应该忽略它们的存在:

              exclude: [ 'path/to/files/to/ignore/**/*.js' ]

              【讨论】:

              • 不仅“不存在”,而且似乎还区分大小写!在 Windows 上,我没想到会这样,我在代码中有一个大小写错误,这就是我的原因!
              【解决方案8】:

              我的项目中有一个完全相同的错误,我发现调试问题所在的最佳和最快的方法是列出我们的业力已加载的文件。

              如果你使用了 karma init(如果没有,就这样做)并且对有关使用 RequireJS 的问题回答“是”,你可能有这样的文件:

                  var tests = [];
                  var TEST_REGEXP = /(spec|test)\.js$/i;
                  var BASE_URL = '/base/build/js';
                  var BASE_URL_REGEXP = /^\/base\/build\/js\/|\.js$/g;
              
                  // Get a list of all the test files to include
                  Object.keys(window.__karma__.files).forEach(function (file) {
                      console.log(file;) // ADD THIS CONSOLE LOG TO LIST LOADED FILES
                      if (TEST_REGEXP.test(file)) {
                        var normalizedTestModule = file.replace(BASE_URL_REGEXP, '')
                          tests.push(normalizedTestModule)
                      }
                  })
              
                  require.config({
                    // Karma serves files under /base, which is the basePath from your config file
                      baseUrl: BASE_URL,
                      paths: {
              
                      },
                      shim: {
              
                      },
              
                      deps: tests,
              
                    // we have to kickoff jasmine, as it is asynchronous
                    callback: window.__karma__.start
                  })
              

              然后您可以使用您的 karam.conf.js 文件并加载新文件以检查 karma 本地路径中发生的情况。

              【讨论】:

                【解决方案9】:

                扩展自@Naruto Sempai 的回答:

                我通过首先在我的karma.conf.js 文件中设置basePath 属性解决了这个问题。此路径包含所需的 ../(上一个目录)字符串,直到我的路径位于源/测试文件的根目录。

                然后我修改了我的test-main.js 文件(包含我的RequireJS 配置)并将baseUrl 设置为/base

                现在,没有时间戳错误。

                --

                为了说明我配置的环境和路径,下面是一个基本设置示例:

                源文件位置:
                /Users/ben/some-project/src/main/resources/var/www/project/js/app

                测试文件位置:
                /Users/ben/some-project/src/test/var/www/project/

                Karma 配置位置:
                /Users/ben/some-project/src/test/var/www/project/karma.conf.js

                Test RequireJS 配置位置:
                /Users/ben/some-project/src/test/var/www/project/test-main.js

                我的karma.conf.js

                module.exports = function (config) {
                    config.set({
                       basePath: '../../../../' 
                    });
                }
                

                /Users/ben/some-project/src/ 成为我的“根”。

                我的test-main.js

                requirejs.config({
                   baseUrl: '/base' 
                });
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2014-02-12
                  • 2017-10-06
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-02-26
                  • 1970-01-01
                  相关资源
                  最近更新 更多