Как протестировать бэкэнд-код nodejs с помощью Karma (testacular)

87

Как мне настроить Karma для запуска моих внутренних модульных тестов (написанных с помощью Mocha)? Если я добавлю свой тестовый скрипт серверной части в файл files = [], он не сможет указать, что requireэто не определено.

Сильвен
источник
Это МОЖНО сделать, взгляните на мой проект: github.com/noamtcohen/Narma
noamtcohen

Ответы:

83

Вы этого не сделаете. Карма предназначена только для тестирования кода на основе браузера. Если у вас есть проект с тестами мокко на бэкэнде и карма / мокко на фронтенде, попробуйте отредактировать свой package.json в скриптах, чтобы установить test на:mocha -R spec && karma run karma.con

Тогда, если npm testвернет true, вы узнаете, что фиксация или развертывание безопасно.

Дэн Кон
источник
Благодарность! Я нашел решение с использованием Grunt, которое я уже планировал использовать в своем проекте. Смотрите мой собственный ответ.
Сильвен
Значит, все участники тестов для JS полагаются на браузер? Это бесполезно.
4
Mocha и Jasmine не полагаются на браузер, и если вы хотите запустить браузер без головы, подумайте об использовании phantomjs.
Дэн Кон
2
Обратите внимание, что полагаться на браузер для тестирования - это НЕ плохо. Существуют разные виды тестов, и в зависимости от ваших потребностей допустимо сквозное тестирование. В некоторых случаях важно даже тестирование визуальной регрессии (см. Хаксли на facebook).
Чиро Коста
15

Похоже, это невозможно (спасибо @dankohn). Вот мое решение с использованием Grunt:

  • Карма: обновите файл karma.conf.js

    • задавать autoWatch = false;
    • задавать singleRun = true;
    • установить browsers = ['PhantomJS'];(чтобы иметь встроенные результаты)
  • Ворчание:

    • npm install grunt-contrib-watch grunt-simple-mocha grunt-karma
    • настроить две задачи grunt (см. файл grunt ниже)

Gruntfile.js:

module.exports = function (grunt) {
  grunt.loadNpmTasks('grunt-simple-mocha');
  grunt.loadNpmTasks('grunt-karma');

  grunt.initConfig({
    simplemocha: {
      backend: {
        src: 'test/server-tests.js'
      }
    },
    karma: {
      unit: {
        configFile: 'karma.conf.js'
      }
    }
  });

  // Default task.
  grunt.registerTask('default', ['simplemocha', 'karma']);
};
  • Grunt (необязательно): настройте grunt-watch для запуска после изменения файлов спецификации или файлов для тестирования.

  • запустить все с помощью gruntкоманды.

Сильвен
источник
3
Так что вам по-прежнему нужен браузер, просто браузер безголовый. Как бесполезно, определенно не использовать карму для тестирования на стороне сервера.
5
Привет, здесь не используется карма для бэкэнда, здесь используется мокко, поэтому без браузера. Это просто удобный способ запустить все ваши тесты, как только вы сохраните файл.
Sylvain
Хотя мне действительно не нужна Карма для того, что я делал, это привело меня к простому пути, чтобы получить настройку grunt для автоматического запуска моих тестов мокко, так что спасибо за это.
Michael Oryl
Интересный подход. Но как обеспечить правильное распознавание глобальных объектов Sails в ваших тестах?
dmvianna