![](/img/trans.png)
[英]How to test a Javascript object property when function with mocha, chai
[英]Mocha and Chai test fails when testing function with setInterval
我是TDD的新手,並與Mocha和Chai合作。 我創建了一個在值增加時傳遞的測試,但是當該增加放在setInterval中時,它會失敗。 此代碼的目標是讓某些內容在屏幕上移動。
function startMovingThing(){
var position = setInterval(function() {
moveThing(10);
}, 100);
}
function moveThing(number){
thing.position += number;
thingOnScreen.style.left = thing.position + 'px';
}
測試:
describe('Thing', function() {
it('should increase position', function(){
assert.increases(startMovingThing, thing, 'position');
});
});
如何通過此測試(或測試應該是什么)?
我不希望moveThing()超出間隔,因為如果間隔被清除並且函數被調用,那么事物就不應該移動。
好吧,問題是你正在使用異步的setInterval,並且你試圖斷言值是以同步方式改變的。
這是測試的修改版本,使用sinonjs來模擬時間的流逝。
var assert = require('chai').assert;
var sinon = require('sinon');
var thing = { position: 0 }
var thingOnScreen = { style: { left: '' } };
function startMovingThing(){
var position = setInterval(function() {
moveThing(10);
}, 100);
}
function moveThing(number){
thing.position += number;
thingOnScreen.style.left = thing.position + 'px';
}
describe('Thing', function() {
beforeEach(function() {
this.clock = sinon.useFakeTimers();
});
afterEach(function() {
this.clock = sinon.restore();
});
it('should increase position', function(){
startMovingThing();
this.clock.tick(101);
assert.equal(thing.position, 10);
});
});
總之,sinonjs正在替換setInterval的全局功能,並且無需等待指定的毫秒即可執行代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.