Разработка с использованием Meteor

Я не вижу, как сделать тестовое развитие в метеоре.

Я не вижу упоминания нигде в документации или FAQ. Я не вижу никаких примеров или что-то в этом роде.

Я вижу, что некоторые пакеты используют Tinytest.

Мне нужен ответ от разработчиков, что такое дорожная карта по этому поводу. Что-то вроде:

  • возможно, нет документации, сами убедитесь.
  • Метеор не построен таким образом, что вы можете сделать тестируемые приложения
  • Это запланированная функция
  • и т.д.

Ответ 1

Обновление 3. В Meteor 1.3 метеор включает в себя руководство по тестированию с пошаговыми инструкциями для тестирования модулей, интеграции, принятия и нагрузки.

Обновление 2: по состоянию на 9 ноября 2015 года Velocity больше не поддерживается. Xolv.io фокусирует свои усилия на Chimp, а Meteor Development Group должна выбрать официальную структуру тестирования.

Обновление: Velocity Официальное тестовое решение Meteor с 0.8.1.


В это время не было написано о автоматическом тестировании с помощью Meteor. Я ожидаю, что сообщество Meteor разработает лучшие практики, прежде чем устанавливать что-либо в официальной документации. В конце концов, Метеор достигла 0,5 на этой неделе, и ситуация все еще быстро меняется.

Хорошие новости: вы можете использовать Node.js инструменты для тестирования с помощью Meteor.

Для моего проекта Meteor я запускаю свои модульные тесты с помощью Mocha, используя Chai для утверждений. Если вам не нужен полный набор функций Chai, я рекомендую вместо этого использовать should.js. На данный момент у меня только модульные тесты, хотя вы также можете написать интеграционные тесты с Mocha.

Обязательно поместите свои тесты в папку "тесты" , чтобы Meteor не пыталась выполнить ваши тесты.

Mocha поддерживает CoffeeScript, мой выбор языка сценариев для проектов Meteor. Здесь образец Cakefile с задачами для запуска тестов Mocha. Если вы используете JS с Meteor, не стесняйтесь адаптировать команды для Makefile.

Ваши модели Meteor нуждаются в небольшой модификации, чтобы разоблачить Mocha, и для этого требуется некоторое знание того, как работает Node.js. Подумайте о каждом файле Node.js как выполненном в пределах его собственной области. Meteor автоматически предоставляет объекты в разных файлах друг другу, но обычные Node приложения, такие как Mocha, не делают этого. Чтобы наши модели были проверены Mocha, export, каждая модель Meteor со следующим шаблоном CoffeeScript:

# Export our class to Node.js when running
# other modules, e.g. our Mocha tests
#
# Place this at the bottom of our Model.coffee
# file after our Model class has been defined.
exports.Model = Model unless Meteor?

... и в верхней части теста Mocha импортируйте модель, которую вы хотите протестировать:

# Need to use Coffeescript destructuring to reference
# the object bound in the returned scope
# http://coffeescript.org/#destructuring
{Model} = require '../path/to/model'

С этим вы можете начать писать и выполнять модульные тесты с помощью своего проекта Meteor!

Ответ 3

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

Я занимался разработкой приложений с метеор, а также разработкой пакетов, как путем реализации пакета для метеорного ядра, так и для atmosphere.

Похоже, что ваш вопрос может быть на самом деле вопросом в трех частях:

  • Как запустить весь набор тестов метеоров?
  • Как написать и запустить тесты для отдельных интеллектуальных пакетов?
  • Как писать и запускать тесты для собственного приложения?

А также звучит так, что там где-то может быть бонусный вопрос:  4. Как реализовать непрерывное интегрирование для 1, 2 и 3?

Я разговаривал и начал сотрудничать с Наоми Сейфер (@sixolet) на метеоре основная команда, чтобы помочь получить окончательные ответы на все эти вопросы в документации.

Я отправил начальный запрос на выгрузку адресации 1 и 2 в ядро ​​метеор: https://github.com/meteor/meteor/pull/573.

Недавно я также ответил на этот вопрос: Как вы проводите тесты метеоров?

Я думаю, что @Blackcoat окончательно ответил 3, выше.

Что касается бонуса, я бы предложил использовать circleci.com хотя бы для непрерывной интеграции ваших собственных приложений. В настоящее время они поддерживают вариант использования, описанный @Blackcoat. У меня есть проект, в котором я успешно получил тесты, написанные в coffeescript для запуска модульных тестов с моккой, в значительной степени, как описал @Blackcoat.

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

Ответ 4

RTD теперь устарела и заменена Velocity, которая является официальной платформой тестирования для Meteor 1.0. Документация по-прежнему относительно новая, поскольку Velocity находится в тяжелом развитии. Вы можете найти дополнительную информацию о Velocity Github repo, Velocity Домашняя страница и Руководство по тестированию Meteor (платный контент)

Отказ от ответственности: я являюсь одним из основных членов группы Velocity и автора книги.


Ознакомьтесь с RTD, полной схемой тестирования для Meteor здесь rtd.xolv.io. Он поддерживает Jasmine/Mocha/custom и работает как с обычным JS, так и с кофе. Он также включает в себя тестовое покрытие, которое объединяет охват устройства/сервера/клиента.

И пример проекта здесь

Блог для объяснения модульного тестирования с помощью Meteor здесь

Подход к тестированию e2e с использованием Selenium WebdriverJS и Meteor здесь

Надеюсь, что это поможет. Отказ от ответственности: я являюсь автором RTD.

Ответ 5

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

Это решение очень просто начать, если не полностью задокументировано, поэтому я рекомендую его для таких людей, как я, которые хотят делать TDD, но не уверены, как работает тестирование в JavaScript и какие библиотеки подключаются к тому, что:

https://github.com/mad-eye/meteor-mocha-web

FYI, я обнаружил, что мне также нужно использовать маршрутизатор Atmosphere package, чтобы запустить маршрут "/tests" и отобразить результаты из тестов, так как я не хотел, чтобы он загромождал мое приложение каждый раз, когда он загружается.

Ответ 6

Об использовании tinytest, вы можете взглянуть на эти полезные ресурсы:

  • Основы объясняются в этом скринкасте: https://www.eventedmind.com/feed/meteor-testing-packages-with-tinytest

  • Как только вы поняли эту идею, вам понадобится публичная документация API для tinytest. На данный момент единственная документация для этого находится в конце источника пакета tinytest: https://github.com/meteor/meteor/tree/devel/packages/tinytest

  • Кроме того, screencast говорит о test-helpers, вы можете посмотреть на все доступные помощники здесь: https://github.com/meteor/meteor/tree/devel/packages/test-helpers Часто в каждом файле есть документация

  • Копание в существующих тестах метеорных пакетов даст много примеров. Один из способов сделать это - выполнить поиск Tinytest. или test. в каталоге пакетов исходного кода метеора

Ответ 7

Я делаю функциональные/интеграционные тесты с помощью Meteor + Mocha в браузере. У меня есть что-то вроде следующих (в coffeescript для лучшей читаемости):

На клиенте...

Meteor.startup ->
    Meteor.call 'shouldTest', (err, shouldTest) ->
        if err? then throw err
        if shouldTest then runTests()

# Dynamically load and run mocha. I factored this out in a separate method so
# that I can (re-)run the tests from the console whenever I like.
# NB: This assumes that you have your mocha/chai scripts in .../public/mocha.
# You can point to a CDN, too.
runTests = ->
    $('head').append('<link href="/mocha/mocha.css" rel="stylesheet" />')
    $.getScript '/mocha/mocha.js', ->
      $.getScript '/mocha/chai.js', ->
        $('body').append('<div id="mocha"> </div>')
        chai.should() # ... or assert or explain ...
        mocha.setup 'bdd'
        loadSpecs() # This function contains your actual describe(), etc. calls.
        mocha.run()

... и на сервере:

Meteor.methods 'shouldTest': -> true unless Meteor.settings.noTests  # ... or whatever.

Конечно, вы можете выполнять тестирование на стороне клиента таким же образом. Тем не менее, для тестирования интеграции приятно иметь всю инфраструктуру Meteor.

Ответ 8

Тестирование становится основной частью Meteor в предстоящем выпуске 1.3. Исходное решение основано на Mocha и Chai.

Оригинальные обсуждения минимального жизнеспособного дизайна можно найти здесь и подробности первая реализация может быть найдена здесь.

ЦРТ подготовили исходные кости справочной документации для тестирования который можно найти здесь, и есть некоторые примеры тестов здесь.

Это пример теста публикации по ссылке выше:

  it('sends all todos for a public list when logged in', (done) => {
    const collector = new PublicationCollector({userId});
    collector.collect('Todos.inList', publicList._id, (collections) => {
      chai.assert.equal(collections.Todos.length, 3);
      done();
    });
  });

Ответ 10

Другим вариантом, который легко доступен с 0.6.0, является запуск всего приложения из локальных интеллектуальных пакетов с минимальным количеством кода за пределами пакетов для загрузки вашего приложения (возможно, с помощью специального смарт-пакета, который является основание вашего приложения).

Затем вы можете использовать Meteor Tinytest, который отлично подходит для тестирования приложений Meteor.

Ответ 11

Ive успешно использовал xolvio: огурец и скорость для моего тестирования. Работает очень хорошо и работает непрерывно, поэтому вы всегда можете видеть, что ваши тесты проходят.

Ответ 12

Метеор + TheIntern

Как-то мне удалось проверить приложение Meteor с помощью TheIntern.js.

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

Существует функция execute, которая позволяет нам запускать JS-код, который может быть доступен для браузера window и, следовательно, Meteor.

Хотите узнать больше о execute

Вот как мой test suite ищет Функциональное тестирование

define(function (require) {
    var registerSuite = require('intern!object');
    var assert = require('intern/chai!assert');
    registerSuite({
        name: 'index',

        'greeting form': function () {
            var rem = this.remote;
            return this.remote
                .get(require.toUrl('localhost:3000'))
                .setFindTimeout(5000)
                .execute(function() {
                        console.log("browser window object", window)
                        return Products.find({}).fetch().length
                    })
                .then(function (text) {
                    console.log(text)
                    assert.strictEqual(text, 2,
                        'Yes I can access Meteor and its Collections');
                });
        }
    });
});

Чтобы узнать больше, это мой gist

Примечание. Я все еще очень рано с этим решением. Я не знаю, могу ли я сделать сложное тестирование с этим или нет. Но я очень уверен в этом.

Ответ 13

Скорость еще не созрела. Я столкнулся с проблемами setTimeout, чтобы использовать скорость. Для тестирования на стороне сервера вы можете использовать этот пакет.

Это быстрее скорости. Velocity требует огромного времени, когда я тестирую любую спецификацию с логином. С кодом Jasmine мы можем протестировать любой метод и публикацию на стороне сервера.