Подтвердить что ты не робот

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"?

4b9b3361

Ответ 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' ]