试图让业力与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提供/ base目录下的文件。所以,在服务器上 对文件的请求将在下面提供
http://localhost:9876/base/*
。 baseUrl的Require.js配置给出 用相对路径加载的模块的起始上下文。什么时候 为Karma服务器设置此值将需要从头开始 /基础。我们希望测试的baseUrl与文件夹相同 我们在src / main.js中有基本网址,所以相对需要在 来源不需要改变。所以,因为我们希望我们的基本网址是 src /,我们需要写/ base / src。
这至少可以说令人困惑。我应该在main.js文件中有一个指向'/ base'的baseUrl配置吗?
答案 0 :(得分:22)
注意:这篇文章在2014年1月16日由Karma有效。我不确定该lib的当前状态,也许他们修复了他们奇怪的配置逻辑并添加了有意义的错误消息。如果没有,那么通过修复与Karma相关的配置问题,这篇文章可能非常有用。
错误配置会导致这类错误。您应该将测试使用的所有内容添加到配置文件中的文件pattern
。
例如:
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中唯一的文件included
by Karma ,其他文件是依赖项由 bootstrap.js 中的代码加载。模式顺序非常重要,遗憾的是它远非合乎逻辑:下一个模式不会覆盖前一个模式。因此,如果我将test/**/*.js
模式设置为第一个,test/bootstrap.js
设置为第二个,则不起作用,因为不会包含引导程序。在这些情况下,Karma会向您发送"empty testsuite"
消息,如果您不知道如何配置它,这将毫无用处...
如果您的测试尝试使用您在Karma配置文件中提供的模式未涵盖的文件,那么您将收到"There is no timestamp for xy"
错误消息,这与前面提到的{{1}非常相似}}。如果您不了解系统,您将不会有任何线索,意味着什么,或者您需要做些什么来修复它......
配置对象的"empty testsuite"
部分用于文件,这些文件已添加到文件模式中以供包含,但您不希望在测试中包含或使用它们。这些可以是例如开发和生产环境的 requirejs 配置文件等......
答案 1 :(得分:19)
对我而言,错误的是设置basePath: 'base'
而不是baseUrl: '/base'
。
baseUrl: '/base'
ftw!
答案 2 :(得分:4)
basePath用于标识项目的根目录相对于配置文件(karma.conf.js)。看一下这个例子:https://github.com/karma-runner/karma/blob/v0.8.5/test/client/karma.conf.js
在浏览器中,我也收到有关时间戳的错误,但它不会影响任何内容。测试工作正常。我想它应该是一个警告而不是一个错误: - )
答案 3 :(得分:3)
杰夫说得对,你应该排除你应用的requirejs配置文件,因为"我们不想在我们的测试中真正启动应用程序。 [LINK]"
test-main.js
配置文件是与您的应用使用的requirejs配置文件不同的文件,在您的情况下可能是config.js
或main.js
,具体取决于在你配置requirejs的地方。
它们都配置路径和依赖项(可以指定相同的路径和依赖项),但前者是为您编写的测试提供requirejs支持。整个requirejs设置与您在应用中使用的requirejs分开。因此,不要包括后者,它会使Karma感到困惑。
上面的链接是一个有效的Karma,带有它的 requirejs演示,请查看。
答案 4 :(得分:2)
尝试在不同来源上发布的所有解决方案后,最后我得到了固定。请在此处查看:Make "no timestamp" error configurable #6。
karma.conf.js文件的问题示例:
client: {
requireJsShowNoTimestampsError: '^(?!.*(^/base/app/node_modules/))'
}
答案 5 :(得分:1)
在我的karma.conf.js文件中,我只是排除了包含我的require.config函数的文件(在我的情况下恰好是config.js)并且错误消失了。
exclude: [
'app/config.js',
'bower_components/jasmine/**/*.js'
],
答案 6 :(得分:1)
我的项目中出现了完全相同的错误,我发现调试问题的最佳和最快方法是列出我们的业力已加载的文件。
如果您使用 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本地路径中发生的事情。
答案 7 :(得分:0)
当有问题的文件确实存在时,也会发生此错误!
因此,请检查以确保您的项目中出现此错误的文件确实存在!
一旦你发现文件是什么,你可以在你的karma.conf.js
中使用这样的模式忽略它们,如果事实证明它们的存在在某些情况下应该被忽略:
exclude: [
'path/to/files/to/ignore/**/*.js'
]
答案 8 :(得分:0)
从@Naruto Sempai的答案中扩展:
我通过首先在我的basePath
文件中设置karma.conf.js
属性来解决此问题。该路径包含所需的../
(上一个目录)字符串,直到我的路径位于源/测试文件的根目录为止。
然后,我修改了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/
业力配置位置:
/Users/ben/some-project/src/test/var/www/project/karma.conf.js
测试RequireJS Config位置:
/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'
});