2016-06-04 2 views
0

나는 믹스 인을 통해 단계별 워크 플로를 진행할 수 있습니다. 기본적으로 현재 단계가 무엇인지 살펴본 다음이를 기반으로 마술을합니다. 문제는 기능의 첫 번째 줄이 this.controllerFor('document')을 잡았고 그 전화를 controllerFor 전화하는 방법을 모르겠다는 것입니다. 예를 들어 {testing: "123"}.create으로 보낼 수 있음을 알고 있습니다. 그러면 this.get('testing')이 표시되지만 controllerFor을 어떻게 조롱합니까? 또한 명확하게하기 위해 controllerFor 호출의 유일한 이유는 currentStep을 얻을 수 있기 때문입니다. 당신은 전이나 시험에 controllerFor 방법을 대체 할 수조종 컨트롤러 qunit 테스트 용.

import Ember from 'ember'; 
import PrepareNext from 'my-app/mixins/prepare-next'; 
import { module, test } from 'qunit'; 

module('mixin:prepare-next'); 

const PrepareNextObject = Ember.Object.extend(PrepareNext); 
let subject; 


test('#setNext does all the things', function(assert) { 
    subject = PrepareNextObject.create(); 
    subject.setNext(); 
    //assert.equal(foo, bar); 
}); 
+0

어떤 주장을하고 싶습니까? 특정 함수가 특정 인수로 호출되었다는 것을 단순히 선언하면 sinon.js를 사용할 수 있습니다. 그렇지 않으면 수락 테스트가 이런 종류의 테스트에 더 적합한 수준이라는 것을 알았습니다. –

답변

1

-준비 next.js

setNext: function() { 
    let currentStep = this.controllerFor('document').get('currentStep'); 

    if (currentStep === 'First_step') { 
     //do something 
    } else { 
     //do something else... 
    } 
    // Bunch more stuff happens... 
} 

준비 - 다음 - test.js :

import Ember from 'ember'; 
import PrepareNext from '../../../mixins/prepare-next'; 
import { module, test } from 'qunit'; 

module('mixin:prepare-next'); 

const PrepareNextObject = Ember.Object.extend(PrepareNext); 

let subject; 

test('#setNext does all the things', function(assert) { 
    assert.expect(2); 

    subject = PrepareNextObject.create(); 
    subject.controllerFor =() => { 
    assert.ok(true, 'controllerFor called'); 
    return { 
     get() { 
     assert.ok(true, 'Get called'); 
     return 'First_step'; 
     } 
    } 
    }; 
    subject.setNext(); 
    //assert.equal(foo, bar); 
}); 

Working demo.

관련 문제