2017-03-24 101 views
0

在控制器中我有Ember.run.later循環,它不斷更新定時器。連續點擊驗收測試Ember.run.later

run: function() { 
    const lastResumeTimestamp = this.get("lastResumeTimestamp"); 
    this.clearTimer(); 
    this.set('timerId', Ember.run.later(this, function() { 
    // update the timer 
    // ... 
     this.run(); 
    }, 100)); 
    }, 

在驗收測試我想點擊按鈕,它應該暫停這樣的循環:

test('I want to start/pause new activity', function(assert) { 
    visit('/'); 
    andThen(function() { 
    assert.equal(find('.duration', activityBuilderSelector).text(), "0"); 

    click('.start-activity-button', activityBuilderSelector); 
    // -->> start continuous Ember.run.later.loop, see: application cortroller 

    waitFor(assert, function() { 
     const val = find('.duration', activityBuilderSelector).text() 
     assert.notEqual(val, "0", `notEqual 0 (${val})`); 
     assert.equal(find('.title', activityBuilderSelector).text(), "New activity", "there should be activity title"); 
     // -->> here test waiting because of run.later loop 
     click('.pause-activity-button', activityBuilderSelector); 
    }); 
    }); 

    andThen(function() { 
     //click('.resume-activity-button', activityBuilderSelector); 
    }); 
}); 

但點擊之前測試暫停,等待循環停止。

如何在循環過程中觸發該點擊並停止繼續測試?

這裏有一點玩弄它表明這個問題: https://ember-twiddle.com/a72ca75527ec4cdc0c3d1c9ebcb421e0?openFiles=tests.acceptance.my-acceptance-test.js%2C

回答

0

我才發現,我可以通過不使用測試助手做到這一點:

$('.pause-activity-button', activityBuilderSelector).click();

,但我不知道這是處理這個問題的正確方法。