2016-10-10 4 views
4

Ember에서이 코드를 테스트하려면 어떻게해야합니까? 나에게 개념을 제발, 일반적으로 설명하십시오.Ember에서 경로의 willTransition 동작을 테스트하는 방법은 무엇입니까?

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

어떻게 만드는지 잘 모릅니다. 길에 스텁 모델이 될 수 있습니까? 그 상점은 경로 테스트에서 사용할 수 없다는 것을 알았습니다.

루비와 RSpec 이후,이 모든 새로운 자바 스크립트 세계는 조금 혼란 스러워요.하지만 어쨌든 그것을 배우고 싶습니다.

+0

코스 코드가 잘못되었습니다;), willTransition은 후크가 아니라 동작입니다. 'actions' 해시에 넣지 마십시오. 그리고 당신은 그것을 쉬기 위해서 부르실 수 있습니다. 상점을 스텁링 할 수 있습니다. – Lux

+0

@Lux 우리의 논리를'willTransition' hook에 쓰려면 우리는 그것을 행동에 정의해야합니다. – 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()로 전달을 올바른와 작업을 호출 전화를 사용하거나 적용해야 어떤 기능이 경우에 (테스트 전화 : 타다 남은에서는이 작업을 수행 할 수 있습니다 범위)를 호출 한 다음 rollbackAttributes()이 호출되었다고 주장합니다.

assert.expect(1);은 테스트 시작시 정확히 1 어설 션을 기다리는 것으로 알려줍니다.