Je veux vérifier que divers champs de date ont été mis à jour correctement, mais je ne veux pas perdre mon temps à prédire quand new Date()
a été appelé. Comment puis-je stub le constructeur Date?
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();
});
});
});
Si cela est pertinent, ces tests s'exécutent dans une application de nœud et nous utilisons TypeScript.
Je suspecte vous voulez la useFakeTimers
fonction:
var now = new Date();
var clock = sinon.useFakeTimers(now.getTime());
//assertions
clock.restore();
Ceci est simple JS. Un exemple de travail TypeScript/JavaScript:
var now = new Date();
beforeEach(() => {
sandbox = sinon.sandbox.create();
clock = sinon.useFakeTimers(now.getTime());
});
afterEach(() => {
sandbox.restore();
clock.restore();
});
J'ai trouvé cette question lorsque je cherchais une solution: comment se moquer de Date
constructeur SEULEMENT . Je voulais utiliser la même date pour chaque test, mais pour éviter de se moquer de setTimeout
. Sinon utilise lolex en interne La solution de mine est de fournir un objet comme paramètre pour sinon:
let clock;
before(async function () {
clock = sinon.useFakeTimers({
now: new Date(2019, 1, 1, 0, 0),
shouldAdvanceTime: true,
advanceTimeDelta: 20
});
})
after(function () {
clock.restore();
})
Autres paramètres possibles que vous pouvez trouver dans lolex API
sinon.useFakeTimers()
était en train de casser certains de mes tests pour une raison quelconque, je devais me moquer de Date.now()
sinon.stub(Date, 'now').returns(now);
Dans ce cas, dans le code au lieu de const now = new Date();
vous pouvez faire
const now = new Date(Date.now());
Ou considérez l'option d'utiliser moment library pour les éléments liés à la date. Stubbing moment est facile.