Розробка метеорних випробувань [закрита]


120

Я не бачу, як зробити тест-керовану розробку в метеорі.

Я не бачу його ніде в документації чи FAQ. Я не бачу прикладів чи подібного.

Я бачу, що деякі пакети використовують Tinytest.

Мені знадобиться відповідь розробників, яка дорожня карта щодо цього. Щось у напрямку:

  • можливо, жодної документації, розібратися в цьому самостійно
  • метеор не побудований таким чином, щоб ви могли робити тестові програми
  • це планова особливість
  • тощо

4
подивіться на блог xolv.io , як згадувалося нижче, є приклади правильного TDD модуля + від кінця до кінця за допомогою Meteor.
Xolv.io

З тону вашого запитання звучить так, ніби у вас складається враження, що в Метеорі бракує досить багато. У чомусь так і є, але атмосфера.meteor.com має пакети, щоб зробити більшість справ, про які ви можете придумати, об'єднавши наявні бібліотеки JS у готовий формат. Це може бути пов'язане з більш сильним на meteor.com, IMHO.
pipedreambomb

5
ви повинні замовити laika
arunoda.github.io/laika

1
В даний час метеорні випробування безлад. Дивіться trello.com/c/BQ3gu0no/12-official-testing-framework для оновлень.
Ендрю Мао

Відповіді:


83

Оновлення 3 : Станом на Meteor 1.3, метеор включає в себе керівництво з випробувань із покроковими інструкціями щодо тестування блоку, інтеграції, приймання та навантаження.

Оновлення 2 : З 9 листопада 2015 року швидкість більше не підтримується . Xolv.io зосереджує свої зусилля на шимпанзе , і група з розвитку метеорів повинна вибрати офіційну структуру тестування .

Оновлення : Швидкість - офіційне рішення для тестування Meteor станом на 0.8.1.


Наразі про автоматичне тестування з Meteor написано не багато. Я сподіваюся, що спільнота Метеор розвиватиме тестування найкращих практик, перш ніж щось встановити в офіційній документації. Зрештою, Метеор цього тижня досяг 0,5, і все ще швидко змінюється.

Хороша новина: ви можете використовувати інструменти тестування Node.js з Meteor .

Для свого проекту Meteor я запускаю мої тести з Mocha, використовуючи Chai для тверджень. Якщо вам не потрібен повний набір функцій Chai, рекомендую використовувати натомість слід.js. На даний момент у мене є тільки тести на одиницю, хоча ви також можете написати інтеграційні тести з Mocha.

Не забудьте помістити свої тести в папку "тести", щоб Meteor не намагався виконати ваші тести.

Mocha підтримує CoffeeScript , мій вибір мови сценаріїв для проектів Meteor. Ось зразок Cakefile із завданнями для запуску тестів Mocha. Якщо ви використовуєте JS з Meteor, сміливо адаптуйте команди для Makefile.

Ваші моделі Meteor потребують незначної модифікації, щоб виявити себе Mocha, і для цього потрібні певні знання про те, як працює Node.js. Подумайте, як кожен файл Node.js виконується в його власному обсязі. Meteor автоматично виставляє об'єкти в різних файлах один одному, але звичайні програми Node - як Mocha - цього не роблять. Щоб зробити наші моделі перевіреними Mocha, експортуйте кожну модель 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's destructuring to reference
# the object bound in the returned scope
# http://coffeescript.org/#destructuring
{Model} = require '../path/to/model'

З цим ви можете почати писати та запускати одиничні тести з вашим проектом Meteor!


2
Я спробував це і зіткнувся з проблемами, коли мій тестуваний код використовує будь-які Meteor.whateverфункції. Я отримую Meteor - це невизначені помилки. Чи є спосіб вимагати від Метеора явно обійти це?
Крістіан Шленскер

2
Крістіан, підхід, описаний у моїй відповіді, наразі є неповним, оскільки він не запускає повний екземпляр вашої програми Meteor. Як результат, Meteorоб'єкт є недоступним, як і будь-які модельні залежності, піддані Метеору. Поліпшення цього процесу передбачає інстанціювання середовища програми в Mocha та піддавання Meteorоб'єкту вашим тестам. Я обов'язково оновлю цю відповідь, коли у мене буде більш повне рішення для тестування. Тим часом, будь ласка, не соромтесь звертатися до мене з будь-якими питаннями чи запропонованими вдосконаленнями.
Чорне пальто

@ChristianSchlensker: Якщо ви використовуєте Mocha для тестування функцій / одиниць на стороні клієнта, у вас є об'єкти Meteor. Дивіться зразок коду в моїй відповіді нижче.
jerico

@jerico Так, це виглядає добре, не працюватиме ні для одного з серверів класів. Крім того, мені подобається постійно проводити мочу - дивитись на весь блок тесту. Вони працюють настільки швидко на стороні сервера, що дозволяє отримати дуже хороший відгук про тестування.
Крістіан Шленскер

1
станом на 1.3 тестування тепер доступне в метеорі
bigmadwolf

44

Привіт усім лайкам, які перевіряють - весь новий тестовий фреймворк для метеора http://arunoda.github.io/laika/

Ви можете протестувати і сервер, і клієнта одночасно.

Відмова: Я автор Laika.


Привіт Арунода. Я ціную вашу наполегливу працю Метеора. Тут, на StackOverflow, ви повинні зазначити як відмову від того, що ви є тим, хто стоїть за лайкою.
напів

5
Це так зробити?
Арунода Сусіріпала

1
Дякуємо Вам за співробітництво.
nalply

14

Я усвідомлюю, що на це питання вже відповіли, але я думаю, що це могло б використати ще якийсь контекст у вигляді додаткової відповіді, що забезпечує вказаний контекст.

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

Здається, що ваше запитання може бути насправді питанням у трьох частинах:

  1. Як можна запустити весь тестовий набір метеорів?
  2. Як писати та запускати тести для окремих смарт-пакетів ?
  3. Як людина пише і запускає тести для власної заявки?

І це також звучить так, що десь там може бути питання про бонус: 4. Як можна реалізувати безперервну інтеграцію для 1, 2 і 3?

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

Я подав початковий запит на витяг, що адресує 1 і 2, до ядра метеора: https://github.com/meteor/meteor/pull/573 .

Нещодавно я також відповів на це питання: як ви проводите тести на метеор?

Я думаю, що @Blackcoat остаточно відповів 3, вище.

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

Для постійної інтеграції метеорних ядер та розумних пакетів, Наомі Сейфер та я спілкуємось із засновником circleci, щоб побачити, чи зможемо ми в найближчому майбутньому реалізувати щось приголомшливе.


12

RTD тепер застаріло і замінено на Velocity, що є офіційною основою тестування для Meteor 1.0. Документація все ще відносно нова, оскільки швидкість знаходиться в значній мірі. Більше інформації можна знайти на репортажі швидкості Github, домашній сторінці Velocity та посібнику з тестування метеорів (платний вміст)

Відмова: Я один з основних членів команди Velocity та автор книги.


Перевірте RTD, повну середу тестування для Метеора тут rtd.xolv.io . Він підтримує Jasmine / Mocha / звичайний і працює як із звичайним JS, так і з кавою. Він також включає тестове покриття, яке поєднує покриття одиниці / сервера / клієнта.

І приклад проекту тут

Блог для пояснення модульного тестування тут

Підхід e2e приймальні випробування з використанням Selenium WebdriverJS і Метеор тут

Сподіваюся, що це допомагає. Відмова: Я є автором RTD.


6

Я дуже користувався цією сторінкою і перепробував усі відповіді, але, починаючи з мого початківця, я вважав їх досить заплутаними. Після того, як у мене виникли проблеми, я був розчулений, як їх виправити.

Це рішення дуже просто для початку, якщо воно ще не повністю задокументоване, тому я рекомендую його людям, як я, які хочуть робити TDD, але не впевнені, як працює тестування в JavaScript і які бібліотеки підключаються до чого:

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

FYI, я виявив, що мені також потрібно використовувати пакет маршрутизатора Atmosphere, щоб зробити маршрут "/ тести" для запуску та відображення результатів тестів, тому що я не хотів, щоб він завантажував додаток кожного разу, коли він завантажується.


1
Ви можете також використовувати meteor-mocha-webз mocha-phantomjsтестуванням автоматизують і для CI. Це те, що ми використовуємо. Повне розкриття інформації - я один із тих, хто підтримує meteor-mocha-web.
jagill

6

Щодо використання найменших тестів, можливо, ви захочете поглянути на ці корисні ресурси:

  1. Основи пояснюються на цьому екрані: https://www.eventedmind.com/feed/meteor-testing-packages-with-tinytest

  2. Після того, як ви зрозуміли цю ідею, ви хочете отримати публічну документацію API tinytest. Наразі єдина документація для цього знаходиться в кінці джерела tinytestпакета: https://github.com/meteor/meteor/tree/devel/packages/tinytest

  3. Крім того, на екрані розмови про те test-helpers, ви можете переглянути тут всі помічники помічників тут: https://github.com/meteor/meteor/tree/devel/packages/test-helpers У кожному з них часто є документація. файл

  4. Копання в існуючих тестах метеорних пакетів дасть безліч прикладів. Один із способів зробити це - здійснити пошук Tinytest.або test.в каталозі пакетів вихідного коду метеора


5

Тестування стає основною частиною Meteor у майбутньому 1.3 випуску. Початкове рішення базується на Мочі та Чаї.

Оригінальні дискусії про мінімально життєздатний дизайн можна знайти тут, а подробиці першої реалізації можна знайти тут .

ЦРТ створили початкові кістки керівної документації для тестування, яку можна знайти тут , і тут є деякі приклади тестів .

Це приклад тесту на публікацію за посиланням вище:

  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();
    });
  });

4

Я роблю функціональні / інтеграційні тести з 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="https://stackoverflow.com/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.


BTW: Це рішення для очікування елементів DOM стане в нагоді під час виконання функціональних тестів у клієнті Meteor за допомогою jQuery.
jerico

3

Як сказав Блеккут, Velocity є офіційною рамкою TDD для Meteor. Але на даний момент веб-сторінка швидкості не пропонує гарної документації. Тож рекомендую вам подивитися:


Корисна публікація. Дякуємо за обмін посиланнями.
Ларан Еванс

2

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

Потім ви можете використовувати Meteor's Tinytest, що чудово підходить для тестування програм Meteor.


0

Я успішно використовував xolvio: огірок і швидкість, щоб зробити тестування. Працює дуже добре і працює постійно, тому ви завжди можете бачити, що ваші тести проходять.


0

Метеор + Внутрішній

Якось мені вдалося протестувати програму Meteor з TheIntern.js.

Хоча це відповідає моїй потребі. Але все ж я думаю, що це може призвести когось у правильному напрямку, і я ділюся тим, що я зробив для вирішення цього питання.

Існує executeфункція, яка дозволяє нам запускати код JS thorugh, який ми можемо отримати доступ до windowоб’єкта браузерів, а отже, Meteorі.

Хочете дізнатися більше про виконання

Ось як 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');
                });
        }
    });
});

Щоб дізнатися більше, це моя суть

Примітка. Я все ще перебуваю на дуже ранній стадії з цим рішенням. Я не знаю, чи можу я зробити складне тестування з цим чи ні. Але я майже впевнений у цьому.


0

Швидкість ще не дозріла. Я зіткнувся з проблемами setTimeout, щоб використовувати швидкість. Для тестування на стороні сервера ви можете використовувати цей пакет .

Це швидше, ніж швидкість. Швидкість вимагає величезного часу, коли я перевіряю будь-які характеристики з логіном. За допомогою коду Жасмін ми можемо протестувати будь-який метод та публікацію на стороні сервера.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.