2014-06-09 1 views
34

Я пытаюсь запустить Карма/Жасмин из Грунта на проекте, генерируемый http://newtriks.com/2013/12/31/automating-react-with-yeoman-and-grunt/Карма/Жасмин раз без выполнения тестов

Карма запускает 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

Я нашел someone with the same problem на OS X:

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

Мой консольный выход ниже. Линии 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 
}); 
}; 

ответ

1

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

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

sudo npm -g remove karma 

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

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

38

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

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

browserNoActivityTimeout: 100000 

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

+1

Я пробовал играть с таймаутами без успеха. Ничего не работало, пока карма была установлена ​​глобально – edoloughlin

+6

'webpack-dev-middleware', используемый под капюшон' webpack-karma', компилирует активы только один раз, когда браузер запрашивает файлы. Таким образом, * после * браузер загрузил тестовую страницу кармы, начинается сбор, только после чего браузер ответит на Карму. Для моего проекта сборка составляет 30-45 секунд. –

15

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

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

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

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

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

+0

Кажется, вы можете использовать 'browserNoActivityTimeout: 0', и это, кажется, заставляет его ждать дольше. Неужели Карма ждет на этот раз навсегда или есть предел? Это не очень хорошо документировано на 'karma-runner.github.io', а google не помогает ни в каком другом месте. – trysis

+12

Где и как (какие настройки) вы используете RAM для phantomJS? – Nick

+0

https://xkcd.com/979/. @Gareth. Как вы это сделали? – Dylanthepiguy

6

Другим вероятным объяснением является необходимость в мешании. Я получаю эту точную ошибку, если добавлю «requirejs» к karma.conf.js в массив config.frameworks. Это, похоже, переопределяет функцию нативного вызова и не позволяет выполнить тесты. В моем случае срабатывал блок описания, но ни один из них не был.

+0

Это тоже моя проблема. Благодаря! – lje

21

Я изменил мою карму конфигурацию, чтобы

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

Также у меня есть 200-300 тестов, PhantomJS 1.9.8 и ему нужен всего лишь около 100 Мб памяти для Phantom С ворчанием и кармой Они все вместе использовали около 300 мб памяти.

+0

Моя проблема была в Jenkins и captureTimeout.Браузер просто слишком долго загружал. –

2

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

+1

Что делать, если кто-то использует синон и чаи или другие? Ваше предложение нарушит тесты. – nottinhill

+0

Это на самом деле решило мою проблему. –

4

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

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

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

После этого конфиг включенного тестов начали работать. Надеюсь, это избавит кого-то еще от стресса!

2

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

0

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

Смежные вопросы