2016-10-10 2 views
4

Как я могу проверить этот код в Ember? Объясните мне, пожалуйста, концепцию, в общем.Как проверить действие маршрута routeTransition в Ember?

// app/routes/products/new.js 
import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model() { 
    return this.store.createRecord('product'); 
    }, 
    actions: { 
    willTransition() { 
     this._super(...arguments); 
     this.get('controller.model').rollbackAttributes(); 
    } 
    } 
}); 

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

После Ruby и RSpec все эти новые javascript-миры немного сбивают с толку) Но я все равно хотел бы изучить его.

+0

Cour code is wrong;), 'willTransition' - это крючок, а не действие. Не помещайте его в хэширование действий. И ты можешь просто позвонить, чтобы отдохнуть. Вы можете заглушить магазин. – Lux

+0

@ Lux, чтобы написать нашу логику в 'willTransition', мы должны определить ее в действиях правильно?. – kumkanillam

+0

@ Lux, Хм, вы знаете, согласно руководству https://guides.emberjs.com/v2.8.0/routing/preventing-and-retrying-transitions/ willTransition появляется в хэшах действий. «При попытке перехода, через {{link-to}}, transitionTo или изменение URL-адреса, активируется действие willTransition на текущих активных маршрутах." - они называют это «действием», а не «крючком». – Molfar

ответ

2

В модульных тестах идея состоит в том, чтобы заглушить все внешние зависимости. В угольке вы можете сделать это:

// tests/unit/products/new/route-test.js 
test('it should rollback changes on transition', function(assert) { 
    assert.expect(1); 
    let route = this.subject({ 
    controller: Ember.Object.create({ 
     model: Ember.Object.create({ 
     rollbackAttributes() { 
      assert.ok(true, 'should call rollbackAttributes on a model'); 
     } 
     }) 
    }) 
    }); 
    route.actions.willTransition.call(route); 
}); 

В основном вы контроллер заглушки и модель передачи их this.subject(), а затем вызвать любую функцию вы тестируете (в этом случае вы должны использовать вызов или применить для вызова действия с правильным scope), а затем утверждают, что был вызван rollbackAttributes().

assert.expect(1); в начале теста говорит QUnit, чтобы ждать ровно 1 утверждение.

Смежные вопросы