Karma error 'Нет метки времени для'
Попытка заставить карму работать с 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!'
Когда я перехожу на вкладку сети в инспекторе, все файлы там без 404s.
Я немного запутался, потому что карма, похоже, ищет "базовый" каталог, но в моем проекте нет "базового" каталога. Согласно документам кармы:
Karma обслуживает файлы в каталоге /base. Итак, на сервере запросы на файлы будут http://localhost:9876/base/*
. Конфигурация Require.js для baseUrl дает начальный контекст для модулей, которые загружаются с относительными путями. когда установив это значение для сервера Karma, ему нужно будет начать с /база. Мы хотим, чтобы baseUrl для наших тестов был той же папкой, что и базовый url, который мы имеем в src/main.js, так что относительный требует в источник не изменится. Итак, поскольку мы хотим, чтобы наш базовый url был src/, нам нужно написать /base/src.
Это смущает, если не сказать больше. Должен ли я иметь конфигурацию baseUrl в файле main.js, который указывает на "/base"?
Ответы
Ответ 1
note: Это сообщение было действительным в Karma в 2014 году 16 января. Я не уверен в текущем состоянии этой библиотеки, возможно, они исправили свою странную логику конфигурации и добавили значимые сообщения об ошибках. Если нет, то этот пост может быть, вероятно, очень полезен, устраняя проблемы конфигурации, связанные с кармой.
Эти ошибки возникают из-за неправильной конфигурации. Вы должны добавить все, что ваш тест использует в файл 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 является единственным файлом included
by Karma в HTML, другие файлы - это зависимости, которые загружаются кодом в bootstrap.js. Порядок шаблонов очень важен и, к сожалению, он далеко не логичен: следующий шаблон не отменяет предыдущий. Поэтому, если бы я дал шаблон test/**/*.js
как первый и test/bootstrap.js
как второй, он не сработает, потому что bootstrap не будет включен. В этих случаях Karma отправляет вам сообщение "empty testsuite"
, которое бесполезно, если вы не знаете, как его настроить...
Если ваши тесты пытаются использовать файл, который не покрывается шаблонами, указанными в файле конфигурации Karma, вы получите сообщение об ошибке "There is no timestamp for xy"
, которое очень похоже на предыдущий "empty testsuite"
. Если вы не знаете систему, у вас не будет подсказки, что это значит или что вам нужно сделать, чтобы ее исправить...
Часть объекта exclude
объекта конфигурации предназначена для файлов, которые были добавлены в шаблоны файлов для включения, но вы не хотите включать или использовать их в своих тестах. Это могут быть, например, файлы конфигурации requirejs для среды разработки и производства и т.д.
Ответ 2
Для меня это просто сделало ошибку, установив basePath: 'base'
вместо baseUrl: '/base'
.
baseUrl: '/base'
ftw!
Ответ 3
BasePath должен идентифицировать корень вашего проекта относительно файла конфигурации (karma.conf.js). Взгляните на этот пример: https://github.com/karma-runner/karma/blob/v0.8.5/test/client/karma.conf.js
В браузере я также получил эту ошибку о метке времени, но она ничего не влияет. Тесты работают правильно. Я думаю, это должно быть предупреждение больше, чем ошибка: -)
Ответ 4
Джефф прав, вы должны исключить файл конфигурации requirejs вашего приложения, потому что "мы не хотим запускать приложение в наших тестах. [LINK ]".
Конфигурационный файл test-main.js
представляет собой отдельный файл из файла конфигурации requirejs, в вашем приложении используется, что в вашем случае может быть config.js
или main.js
, в зависимости от того, где вы настраиваете свои требования.
Они оба настраивают путь и зависимости (могут указывать на одни и те же), но первая заключается в предоставлении поддержки requirejs для тестов, которые вы пишете. Вся эта установка требует отдельной настройки из требований, которые вы используете в своем приложении. Поэтому не включайте последнего, он смущает Карму.
И вышеприведенная ссылка представляет собой рабочую Карму с демонстрацией ее requirejs, проверьте ее.
Ответ 5
Попробовав все решения, размещенные в разных источниках, Наконец, я получил исправление. Проверьте это здесь: Конфигурируется ошибка "no timestamp" # 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'
]