2015-07-23 21 views
13

Chcę sprawdzić, czy różne pola daty zostały poprawnie zaktualizowane, ale nie chcę zadzierać z przewidywaniem, kiedy został wywołany new Date(). Jak mogę wyłączyć konstruktor Date?Jak zaimplementować nową datę() przy użyciu sinon?

import sinon = require('sinon'); 
import should = require('should'); 

describe('tests',() => { 
    var sandbox; 
    var now = new Date(); 

    beforeEach(() => { 
    sandbox = sinon.sandbox.create(); 
    }); 

    afterEach(() => { 
    sandbox.restore(); 
    }); 

    var now = new Date(); 

    it('sets create_date', done => { 
    sandbox.stub(Date).returns(now); // does not work 

    Widget.create((err, widget) => { 
     should.not.exist(err); 
     should.exist(widget); 
     widget.create_date.should.eql(now); 

     done(); 
    }); 
    }); 
}); 

Jeśli jest to istotne, testy te są uruchomione w aplikacji węzła i używamy TypeScript.

Odpowiedz

33

I podejrzany chcesz useFakeTimers funkcję:

var now = new Date(); 
var clock = sinon.useFakeTimers(now.getTime()); 
//assertions 
clock.restore(); 

To jest zwykły JS. Działający przykład TypeScript/JavaScript:

+0

Niesamowite, wygląda na to, że robi to, czego potrzebowałem. Kiedy otrzymam wreszcie działającą wersję, zmienię ją w twoją odpowiedź i zaakceptuję. – MrHen