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

Карма/Жасмин выбегает без тестов

Я пытаюсь запустить 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-server: 1.4.1
  • карма-жасмин: 0.1.5
  • Linux: Ubuntu 14.04

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

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

Мой консольный вывод ниже. Линии webpack, ссылающиеся на пакет, теперь 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
});
};
4b9b3361

Ответ 1

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

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

browserNoActivityTimeout: 100000

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

Ответ 2

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

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

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

Ответ 3

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

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

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

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

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

Ответ 4

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

Ответ 5

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

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

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

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

Ответ 6

Извлеките 'require' из файла конфигурации кармы, просто используйте фреймворки: ['jasmine'].

Ответ 7

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

Ответ 8

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

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

sudo npm -g remove karma

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

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

Ответ 9

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