Ember Test для родительского маршрута с вызовами методов

Меня пригласили на «бэкэнд» проекта и попросили помочь написать тесты для приложения. Я новичок в Ember, и мне нужна небольшая помощь, чтобы начать работу. Мы пытаемся предоставить модульное тестирование для маршрутов, поэтому у нас может быть немного больше молекулярного охвата приложения вместо приемочного теста. Я просмотрел несколько руководств и рассмотрел все возможные сценарии, которые только мог придумать. Мне просто нужно немного толчка.

Вот часть route.js для этого маршрута.

  • вниз по течению этого родительского маршрута у нас есть еще один вложенный маршрут, который показывает список контактов, и когда пользователь нажимает кнопку «Показать», он вызывает «модель» и возвращает эту переменную «рек» для шаблона и URL-адреса


export default Route.extend(ScrollTo, {
  flashMessages: service(),

  model: function(params) {
    let rec= this.store.peekRecord('contact', params.contact_id);
    return rec;
  },

  actions: {
    saveContact: function() {
      let model = this.currentRouteModel();
      model
        .save()
        .then(() => {
          //this.refresh();
          //this.setModelHash();
          this.flashMessages
            .success(`Saved Contact: ${model.get('title')}`);

          //this.transitionTo('contacts');
        });
    }

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

  • Это приложение не имеет серверной части, его дизайн заключается в том, чтобы получать информацию и предоставлять файл iso на основе любого стандарта, который хочет пользователь.
  • Я уверен, что мне нужно предоставить некоторые фиктивные данные для теста и отправить их методу, но опять же я не уверен, какие части Qunit я использую.
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';

module('Unit | Route | contact/show', function(hooks) {
  setupTest(hooks)

  test('it exists', function(assert) {
    var route = this.owner.lookup('route:contact/show');
    assert.ok(route, 'contact.show route works');
  });
});

person Devon Anderson    schedule 21.11.2019    source источник
comment
Имейте в виду, что действия на маршруте считаются антипаттерном. Подробности см. в обсуждении RFC о действиях на маршруте.   -  person jelhan    schedule 22.11.2019
comment
Да, определенно согласен, я не был на начальных этапах создания приложения. И, к сожалению, он был построен командой из двух человек, которые приняли эту философию действий на маршрутах и ​​придерживались ее. Я пытаюсь найти лучшее решение для теста. Будь то на уровне приложения или на уровне контейнера.   -  person Devon Anderson    schedule 22.11.2019


Ответы (1)


Я тоже боролся с этим, когда впервые перешел на фронтенд-тестирование. Имея несколько лет опыта, я с уверенностью могу сказать, что вам не следует проводить модульное тестирование объектов маршрута таким образом. Вместо этого тестирование Ember-приложения должно быть сосредоточено на двух типах тестов.

  1. То, что ember называет интеграционными тестами (но на самом деле ближе к модульным тестам пользовательского интерфейса)
  2. Приемочные испытания

Интеграционные тесты компонентов позволяют вам вникнуть в мелкие детали и пограничные случаи. и они могут быть очень ценными.

Я думаю, что в данном случае вам нужен приемочный тест.

Если ваш опыт тестирования похож на мой, поначалу вам может показаться, что вы тестируете слишком много вещей, но такие типы тестов, когда браузер фактически загружает все приложение, имеют наибольшую ценность для поиска ошибок и являются наиболее удобными в сопровождении. время.

person jrjohnson    schedule 21.11.2019