2012-12-04 4 views
3

과 같은 this qunit test을 사용하려고 할 때 jasmine을 사용하면 이상한 일이 발생합니다. (통화 횟수가 3 동일)재스민을 사용하여 비동기 기능을위한 사양

it('_.debounce()', function() { 
    var spy = jasmine.createSpy('debounce'), 
     debouncedSpy = _.debounce(spy, 100); 

    jasmine.Clock.useMock(); 

    // direct calls 
    debouncedSpy(); 
    debouncedSpy(); 
    debouncedSpy(); 

    // timed out calls 
    setTimeout(debouncedSpy, 60); 
    setTimeout(debouncedSpy, 120); 
    setTimeout(debouncedSpy, 180); 
    setTimeout(debouncedSpy, 240); 
    setTimeout(debouncedSpy, 300); 

    jasmine.Clock.tick(300); 
    expect(spy).toHaveBeenCalled(); 

    jasmine.Clock.tick(400); 
    expect(spy).toHaveBeenCalled(); 

    jasmine.Clock.tick(1000); 
    expect(spy.callCount).toBe(1); 
}); 

그것은 작동하지 않습니다

jasmine.Clock.useMock() ... 를 사용하여 테스트 할 수있는 것 같다하지만 쓸 때. 하지만 직접 전화를하지 않고 (또는 내가 setTimeout(..., 0)을 사용할 때) 모든 것이 잘 작동합니다. 내가 뭘 잘못하고있어?

또한 runswaits을 통해 처리하려고 시도했으며 작동합니다. 그러나 이전 예제에서 왜 작동하지 않습니까?

it('should be called once', function() { 
    var spy = jasmine.createSpy('debounce'), 
     debouncedSpy = _.debounce(spy, 100); 

    runs(function() { 
     debouncedSpy(); 
     debouncedSpy(); 
     debouncedSpy(); 

     expect(spy).not.toHaveBeenCalled(); 

     setTimeout(debouncedSpy, 60); 
     setTimeout(debouncedSpy, 120); 
     setTimeout(debouncedSpy, 180); 
     setTimeout(debouncedSpy, 240); 
     setTimeout(debouncedSpy, 300); 
    }); 

    waits(800); 

    runs(function() { 
     expect(spy.callCount).toBe(1); 
    }); 
}); 
+0

QUnit에서 테스트 해보십시오. 또한 기능 설명을 위해. 그것은 '1'과 같아야합니다. – ValeriiVasin

답변