Ember запуталась при тестировании хуков и действий маршрута

Я только начинаю рассматривать тестирование с Ember, и я немного не понимаю, как тестировать следующее:

1 - Маршрутные крючки

Вот пример того, что у меня есть, я не уверен, нужно ли это делать с помощью модульного тестирования или пользовательского приемочного тестирования? Как мне запустить перехватчики, дождаться обещания и т. Д.?

/**
 * Model hook.
 */
model() {
    return this.modelFor('new');
},

/**
 * AfterModel hook.
 */
afterModel() {
    /**
     * Setup provinces.
     */
    return new Ember.RSVP.Promise((resolve) => {
        const provinces = Ember.A([
            Ember.Object.create({
                code: 'AB',
                description: 'Alberta'
            }),
            Ember.Object.create({
                code: 'BC',
                description: 'British Columbia'
            }),
            Ember.Object.create({
                code: 'MB',
                description: 'Manitoba'
            }),
            Ember.Object.create({
                code: 'NB',
                description: 'New Brunswick'
            }),
            Ember.Object.create({
                code: 'NL',
                description: 'Newfoundland and Labrador'
            }),
            Ember.Object.create({
                code: 'NS',
                description: 'Nova Scotia'
            }),
            Ember.Object.create({
                code: 'NT',
                description: 'Northwest Territories'
            }),
            Ember.Object.create({
                code: 'NU',
                description: 'Nunavut'
            }),
            Ember.Object.create({
                code: 'ON',
                description: 'Ontario'
            }),
            Ember.Object.create({
                code: 'PE',
                description: 'Prince Edward Island'
            }),
            Ember.Object.create({
                code: 'QC',
                description: 'Quebec'
            }),
            Ember.Object.create({
                code: 'SK',
                description: 'Saskatchewan'
            }),
            Ember.Object.create({
                code: 'YK',
                description: 'Yukon'
            })
        ]);
        resolve(provinces);
    }).then((provinces) => {
        this.set('provinces', provinces);
    });
},

/**
 * Setup controller hook.
 * @param controller the controller
 * @param model The model
 */
setupController(controller, model) {
    this._super(controller, model);
    controller.set('provinces', this.get('provinces'));
}

2 - Действия контроллера / маршрута

Здесь я в основном либо иду по другому маршруту, либо показываю сообщение об ошибке, это то, что нужно тестировать? если да, то как?

actions: {
    /**
     * Go previous step
     */
    back() {
        this.transitionToRoute('new.step1');
    },
    /**
     * Go to next step.
     */
    next() {
        this.get('model').save().then(() => {
            this.transitionToRoute('new.step3');
        }).catch(() => {
            this.get('notificationService')
                .notifyError('common.error.system_error');
        });
    }
}

person jpoiri    schedule 26.01.2017    source источник


Ответы (1)


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

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

Как в этом примере:

// Now use the routes send method to test the actual action route.send('displayAlert', expectedTextBar);

Хорошая идея - разбить код на более мелкие части, которые вы можете тестировать индивидуально. Как сказано в документации: «разделение кода на более мелкие куски (или« проблемы ») позволяет легче изолировать его для тестирования, что, в свою очередь, позволяет легче выявлять ошибки».

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

В качестве примечания: я вижу, что вы возвращаете массив объектов в свой afterModel хук. Это будет прекрасно работать без использования RSVP.

Надеюсь, это поможет.

person Rimian    schedule 17.12.2017