ошибка кармы «Нет метки времени для»

Попытка заставить карму работать с 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/*. Конфигурация Require.js для baseUrl дает начальный контекст для модулей, которые загружаются с относительными путями. При установке этого значения для сервера Karma необходимо начинать с /base. Мы хотим, чтобы baseUrl для наших тестов был той же папкой, что и базовый URL-адрес, который у нас есть в src/main.js, поэтому относительные требования в источнике не нужно менять. Итак, поскольку мы хотим, чтобы наш базовый URL-адрес находился в src/, нам нужно написать /base/src.

Это сбивает с толку, если не сказать больше. Должен ли я иметь конфигурацию baseUrl в моем файле main.js, которая указывает на «/ base»?


person Jeff    schedule 22.12.2013    source источник


Ответы (9)


примечание: этот пост был действителен от Karma в 2014 году от 16 января. Я не уверен в текущем состоянии этой библиотеки, возможно, они исправили свою странную логику конфигурации и добавили осмысленные сообщения об ошибках. Если нет, то этот пост, вероятно, может быть очень полезен для решения проблем с конфигурацией, связанных с кармой.

Такие ошибки возникают из-за неправильной настройки. Вы должны добавить все, что использует ваш тест, в файл 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 является единственным файлом included by Karma в HTML, остальные файлы являются зависимостями, которые загружаются кодом в bootstrap.js. Порядок шаблонов очень важен и, к сожалению, далек от логики: следующий шаблон не переопределяет предыдущий. Поэтому, если бы я дал шаблон test/**/*.js первым, а test/bootstrap.js вторым, это не сработало бы, потому что начальная загрузка не была бы включена. В этих случаях Karma посылает вам сообщение "empty testsuite", которое бесполезно, если вы не знаете, как его настроить...

Если ваши тесты попытаются использовать файл, на который не распространяются шаблоны, указанные вами в файле конфигурации Karma, вы получите сообщение об ошибке "There is no timestamp for xy", которое очень похоже на ранее упомянутое "empty testsuite". Если вы не знаете систему, вы не будете иметь ни малейшего представления о том, что она означает и что вам нужно сделать, чтобы ее починить...

Часть exclude объекта конфигурации предназначена для файлов, которые были добавлены в шаблоны файлов для включения, но вы не хотите включать или использовать их в своих тестах. Это могут быть, например, файлы конфигурации requirejs для сред разработки и производства и т. д.

person inf3rno    schedule 16.01.2014

Для меня это была просто ошибка установки basePath: 'base' вместо baseUrl: '/base'.

baseUrl: '/base' фтв!

person Naruto Sempai    schedule 22.05.2014
comment
Можете ли вы прояснить в своем описании оппозицию между basePath и& baseUrl -- наряду с контекстом karma.conf.js -- ИЛИ -- test-main.js? - person Cody; 15.11.2014
comment
Я рад, что ОП нашел решение своей конкретной проблемы, но для меня правильным решением было назначить baseUrl: '/base' в моем файле require.config.js. Я использовал grunt-karma, который использовал karma.config через _ configFile: 'karma.conf.js'_ в объекте конфигурации grunt. Независимо от вывода, убедитесь, что вы назначаете '/base' для baseUrl, где бы вы ни использовались, и, как всегда... опечатки - враги! - person Naruto Sempai; 12.02.2015
comment
Это исправило это для меня, и я должен больше голосовать за ИМО. Если вы вообще не получаете файлы, это отдельная проблема, и этот ответ фактически ответил на вопрос! - person jasongonzales; 05.08.2015
comment
Как это связано с сообщением об ошибке временной метки? -- Все файлы обслуживаются правильно AFAICT, но я сохраняю это сообщение с меткой времени для каждого файла. Мой baseUrl настроен правильно. - person BrainSlugs83; 19.10.2015

BasePath должен идентифицировать корень вашего проекта относительно файла конфигурации (karma.conf.js). Взгляните на этот пример: https://github.com/karma-runner/karma/blob/v0.8.5/test/client/karma.conf.js

В браузере я также получил эту ошибку о метке времени, но это ни на что не влияет. Тесты работают нормально. Я думаю, это должно быть скорее предупреждением, чем ошибкой :-)

person Jeff Renaud    schedule 22.12.2013

Джефф прав, вы должны исключить файл конфигурации requirejs вашего приложения, потому что «мы не хотим запускать приложение в наших тестах». [ССЫЛКА]".

Файл конфигурации test-main.js — это файл, отдельный от файла конфигурации requirejs, используемого вашим приложением, который в вашем случае может быть config.js или main.js, в зависимости от того, где вы настраиваете свои requirejs.

Они оба настраивают путь и зависимости (могут быть указаны примерно одни и те же), но первый должен обеспечить поддержку requirejs для тестов, которые вы пишете. Вся эта настройка requirejs является отдельной от requirejs, которые вы используете в своем приложении. Так что не включайте последнее, это сбивает Карму с толку.

А ссылка выше — это работающая Karma с ее демонстрацией requirejs, проверьте ее.

person Lucia    schedule 23.06.2014

Попробовав все решения, размещенные в разных источниках, наконец-то я исправил. Проверьте это здесь: Сделайте настройку ошибки "no timestamp" #6 .

Пример из задачи для файла karma.conf.js:

client: {
  requireJsShowNoTimestampsError: '^(?!.*(^/base/app/node_modules/))'
}
person Indrajit Das    schedule 17.07.2014

в моем файле karma.conf.js я просто исключил свой файл, содержащий мою функцию require.config (в моем случае это был config.js), и ошибки исчезли.

  exclude: [
    'app/config.js',
    'bower_components/jasmine/**/*.js'
  ],
person Jeff    schedule 22.12.2013

Эта ошибка также может произойти, когда рассматриваемые файлы на самом деле не существуют!

Поэтому убедитесь, что файл, для которого вы получаете эту ошибку, действительно существует в вашем проекте!

Как только вы узнаете, что это за файлы, вы можете игнорировать их, используя такой шаблон в вашем karma.conf.js, если окажется, что в некоторых случаях их существование следует игнорировать:

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

person Brad Parks    schedule 16.05.2016
comment
не только не существует, но и кажется чувствительным к регистру! в Windows я этого не ожидал, у меня была ошибка регистра в коде, и это было для меня! - person John Gardner; 28.04.2020

У меня была точно такая же ошибка в моем проекте, и я обнаружил, что лучший и самый быстрый способ отладки, где проблема, - это перечислить файлы, которые загрузила наша карма.

Если вы использовали karma init (если нет, просто сделайте это) и ответили YES на вопрос об использовании 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 и загрузить новые файлы, чтобы проверить, что происходит в локальном пути кармы.

person Jakub Rybiński    schedule 16.03.2018

Расширение из ответа @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/

Расположение Karma Config:
/Users/ben/some-project/src/test/var/www/project/karma.conf.js

Расположение тестовой конфигурации RequireJS:
/Users/ben/some-project/src/test/var/www/project/test-main.js

My karma.conf.js:

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

чтобы сделать мой "корень" на /Users/ben/some-project/src/.

My test-main.js:

requirejs.config({
   baseUrl: '/base' 
});
person BenS    schedule 31.07.2018