Время ожидания Кармы / Жасмин истекло без выполнения тестов

Я пытаюсь запустить Karma / Jasmine из Grunt в проекте, созданном с помощью http://newtriks.com/2013/12/31/automating-react-with-yeoman-and-grunt/

Karma запускает PhantomJS (или Chrome) и, в зависимости от singleRun, либо время ожидания истекает, либо просто сидит и ничего не делает. Я пробовал изменить captureTimeout и browserNoActivityTimeout на основе решений, полученных от людей с похожими проблемами, но, похоже, это не сработало.

Мои соответствующие версии pacakge и т.д .:

  • NodeJS: 0.10.25
  • Карма: 0.12.16
  • Webpack: 1.1.11
  • webpack-dev-сервер: 1.4.1
  • карма-жасмин: 0,1,5
  • Linux: Ubuntu 14.04

Я нашел кого-то с таким же проблема в OS X:

Я пробовал обновить все свои зависимости разработчика до последних версий, но проблема все еще остается.

Мой вывод на консоль ниже. Строки webpack, относящиеся к bundle, теперь VALID / INVALID вызывают беспокойство, но я не могу найти никакой информации о том, что они означают. Вот мой вывод на консоль:

Running "karma:unit" (karma) task
DEBUG [config]: autoWatch set to false, because of singleRun
DEBUG [plugin]: Loading karma-* from /home/ed/workspace/wwb-app/node_modules
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-chrome-launcher.
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-coffee-preprocessor.
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-firefox-launcher.
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-html2js-preprocessor.
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-jasmine.
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-phantomjs-launcher.
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-requirejs.
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-script-launcher.
DEBG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-webpack-plugin.
INFO [karma]: Karma v0.12.16 server started at  http://localhost:8080/
INFO [launcher]: Starting browser PhantomJS
DEBUG [temp-dir]: Creating temp dir at /tmp/karma-98204612
DEBUG [launcher]: /home/ed/workspace/wwb-app/node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/bin/phantomjs /tmp/karma-98204612/capture.js
Hash: 89285186567c1bc5bb7f
Version: webpack 1.1.11
Time: 2ms
Asset  Size  Chunks       Chunk Names
webpack: bundle is now VALID.
webpack: bundle is now INVALID.
DEBUG [web-server]: serving: /home/ed/workspace/wwb-app/node_modules/karma/static/client.html
DEBUG [web-server]: serving: /home/ed/workspace/wwb-app/node_modules/karma/static/karma.js
DEBUG [web-server]: upgrade /socket.io/1/websocket/CjC8pnQq5It2z_kWYB98
DEBUG [karma]: A browser has connected on socket CjC8pnQq5It2z_kWYB98
INFO [PhantomJS 1.9.7 (Linux)]: Connected on socket CjC8pnQq5It2z_kWYB98 with id 98204612
DEBUG [launcher]: PhantomJS (id 98204612) captured in 1.704 secs
WARN [PhantomJS 1.9.7 (Linux)]: Disconnected (1 times), because no message in 30000 ms.

DEBUG [karma]: Run complete, exitting.
DEBUG [launcher]: Disconnecting all browsers
DEBUG [launcher]: Process PhantomJS exited with code 0
DEBUG [temp-dir]: Cleaning temp dir /tmp/karma-98204612
Warning: Task "karma:unit" failed. Use --force to continue.

Aborted due to warnings.

Вот мой karma.conf.js файл:

'use strict';

module.exports = function (config) {
config.set({
    basePath: '',
    frameworks: ['jasmine'],
    files: [
        'test/helpers/**/*.js',
        'test/spec/components/**/*.js'
    ],
    preprocessors: {
        'test/spec/components/**/*.js': ['webpack']
    },
    webpack: {
        cache: true,
        module: {
            loaders: [{
                test: /\.css$/,
                loader: 'style!css'
            }, {
                test: /\.gif/,
                loader: 'url-loader?limit=10000&minetype=image/gif'
            }, {
                test: /\.jpg/,
                loader: 'url-loader?limit=10000&minetype=image/jpg'
            }, {
                test: /\.png/,
                loader: 'url-loader?limit=10000&minetype=image/png'
            }, {
                test: /\.js$/,
                loader: 'jsx-loader'
            }]
        }
    },
    webpackServer: {
        stats: {
            colors: true
        }
    },
    exclude: [],
    port: 8080,
    logLevel: config.LOG_DEBUG,
    colors: true,
    autoWatch: true,
    // Start these browsers, currently available:
    // - Chrome
    // - ChromeCanary
    // - Firefox
    // - Opera
    // - Safari (only Mac)
    // - PhantomJS
    // - IE (only Windows)
    browsers: ['PhantomJS'],
    reporters: ['progress'],
    captureTimeout: 60000,
    browserNoActivityTimeout: 60000,
    singleRun: true
});
};

person edoloughlin    schedule 09.06.2014    source источник


Ответы (11)


У меня такая же проблема. Из связанной проблемы с GitHub я узнал, что вы можете продлить время ожидания бездействия.

Установите этот параметр конфигурации Karma в файле конфигурации gruntfile или karma:

browserNoActivityTimeout: 100000

Я установил его на 100 секунд, и мои тесты прошли успешно. Я не знаю, что вызывает задержку.

person Matthias    schedule 22.07.2014
comment
Я безуспешно пытался поиграть с таймаутами. Ничего не работало, пока карма была установлена ​​глобально - person edoloughlin; 22.07.2014
comment
webpack-dev-middleware, используемый под капотом webpack-karma, компилирует ресурсы только после того, как браузер запрашивает файлы. Следовательно, после браузер загрузит тестовую страницу кармы, начинается компиляция, только после чего браузер ответит на карму. Для моего проекта производственная компиляция занимает от 30 до 45 секунд. - person Tom McKenzie; 18.05.2015
comment
Я много раз думал, что решил проблему, но каждый раз ошибался, иногда это срабатывает, в другой раз - нет. Пытался поиграть и с таймаутами, параметры браузера, чтобы сделать его как можно более легким (хром без заголовка, без плагинов, без файлов перевода, ...), пытались освободить мою машину от всех других процессов Chrome, также пытались, по крайней мере, приблизительно 6 ГБ доступной оперативной памяти, пробовал другие версии кармы ... каждый раз бывает, иногда как-то. - person Alex; 02.07.2019

Я изменил свою конфигурацию Karma на

captureTimeout: 60000, // it was already there
browserDisconnectTimeout : 10000,
browserDisconnectTolerance : 1,
browserNoActivityTimeout : 60000,//by default 10000

Также у меня 200-300 тестов, PhantomJS 1.9.8 и для Phantom With grunt и karma требуется всего около 100 МБ памяти. Все вместе они использовали около 300 МБ памяти.

person Anatoli Klamer    schedule 19.11.2015
comment
Моя проблема была в Jenkins и captureTimeout. Браузер просто загружался слишком долго. - person Rafael Emshoff; 09.03.2017

Мы столкнулись с аналогичной проблемой на наших серверах сборки.

Увеличение параметра browserNoActivityTimeout сработало до определенной степени. Мы увеличили его до 60000 мс, но проблема с отключением phantomJS вернулась по мере увеличения количества модульных тестов.

В конце концов мы отследили проблему до оперативной памяти, доступной для phantomJS. У нас было 1100 модульных тестов, выполнение которых заняло бы ~ 1 мин 30 с, но phantomJS не смог бы отключиться за время ожидания 60000 мс.

Оперативная память виртуальной машины узла сборки была увеличена с 2 ГБ до 4 ГБ, а затем выполнение модульных тестов 1100 заняло ~ 45 секунд, а phantomJS отключился через ~ 5 секунд. Огромное улучшение.

Есть два урока: 1. PhantomJS требует памяти, поэтому убедитесь, что у него достаточно оперативной памяти для выполнения своих задач. 2. Профилируйте свой код, чтобы узнать, где можно более эффективно использовать память.

person Gareth    schedule 05.12.2014
comment
Кажется, вы можете использовать browserNoActivityTimeout: 0, и это заставляет ждать дольше. Карма ждет здесь вечно или есть предел? Это плохо документировано на karma-runner.github.io, и Google также не помогает в других местах. - person trysis; 17.04.2015
comment
Где и как (какие настройки) вы загружаете оперативную память для phantomJS? - person Nick; 22.09.2015
comment
@Nick Он сказал - увеличив ОЗУ, выделенное его виртуальной машине. Сам Phantom не имеет ограничения по памяти. - person JShorthouse; 03.06.2019

Другое вероятное объяснение - это мешает RequireJS. Я получаю именно эту ошибку, если добавляю requirejs в karma.conf.js в массиве config.frameworks. Кажется, что это переопределяет встроенную функцию require и приводит к тому, что тесты не выполняются. В моем случае сработал блок описания, но его не было, если были блоки it.

person Micros    schedule 20.10.2015

В моем случае я не включил следующий код в свой файл test.js:

requirejs.config({
    callback: window.__karma__.start
});

describe('tests', function() {
    ...

Как только эта конфигурация была включена, тесты начали работать. Надеюсь, это избавит кого-то от стресса!

person garryp    schedule 19.07.2016

Удалите «требует» из конфигурационного файла кармы, просто используйте frameworks: ['jasmine »].

person user5704261    schedule 21.12.2015
comment
Что делать, если кто-то дополнительно употребляет sinon и chai или другие? Ваше предложение сломает тесты. - person Steve K; 08.02.2016
comment
Если я попробую это сделать, я получаю Uncaught referenceError: define is not defined - person pabrams; 08.05.2018

Убедитесь, что localhost правильно указывает на 127.0.0.1, а не на недостижимый IP-адрес. Это может произойти, например, в средах разработки с использованием виртуальных машин.

person eloone    schedule 19.09.2016

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

Если у вас есть эта проблема, попробуйте

sudo npm -g remove karma

и если это не сработает, я бы удалил все пакеты глобальных узлов (кроме действительно глобальных пакетов, таких как yeoman, grunt-cli, например). А затем установите локально для своего проекта.

Я также заметил, что когда вы запускаете sudo npm -i в OS X, он меняет владельца ~ / .npm на root, и последующие npm -i команды не работают. с ошибкой EACCESS.

person edoloughlin    schedule 17.07.2014

Это может быть не так для OP здесь, но если код, который вы тестируете, попадает в бесконечный цикл, это приведет к отключению по таймауту, как это.

person Todd Sjolander    schedule 03.11.2017

Вот почему я получал эту ошибку, может помочь кому-то в подобной ситуации. У моего основного компонента было несколько дочерних компонентов, которые использовали разные службы, одна из служб имела HTTP-вызов, и инициализация не удалась, поскольку я использовал эту службу в методе ngInit () дочернего компонента. Чтобы решить эту проблему, мне пришлось импортировать вышеуказанный сервис в спецификации основных компонентов и прикрепить макет для сервиса, после этого он начал работать.

person Vijender    schedule 23.10.2019

Ответ @ Vijender направил меня на верный путь

Это было так же просто, как заменить HttpClientModule в тестах на HttpClientTestingModule.

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [
        HttpClientTestingModule
      ]
    }).compileComponents();
  }));
person Vedran    schedule 02.06.2020