Я пытаюсь запустить тест, где хочу проверить, что мой вспомогательный файл работает правильно, и если у меня есть истекший токен, я получаю обратную отдачу и не могу продолжить.useFakeTimers mocha chai sinon - не правильный результат при тестировании
У меня такое чувство, что я могу только подделать время непосредственно в тесте, а не за его пределами. Дело в том, что я не хочу копировать функцию jwt.verify в свой тест, потому что это побеждает цель, если я изменю код в фактическом вспомогательном файле. Любая помощь в этом, чтобы сделать эту работу?
Я фальсифицирую время с помощью синона. Если я проверю, какое время я получаю сейчас и после такта, я получаю правильные результаты. Но по какой-то причине это не относится к функции в другом файле.
мои local.js файл
const moment = require('moment');
const jwt = require('jsonwebtoken');
const secret = process.env.TOKEN_SECRET;
function encodeToken(user) {
const playload = {
exp: moment().add(1, 'hours').unix(), // expires the token in an hour
iat: moment().unix(),
sub: user.id
};
return jwt.sign(playload, secret);
}
function decodeToken(token, callback) {
const payload = jwt.verify(token, secret, function (err, decoded) {
const now = moment().unix();
console.log('tim: ' + decoded.exp); //just to see
console.log('now: ' + now); // just to see
if (now > decoded.exp) {
callback('Token has expired.');
}
callback(null, decoded);
});
}
module.exports = {
encodeToken,
decodeToken
};
и мой тестовый файл:
process.env.NODE_ENV = 'test';
const chai = require('chai');
const should = chai.should();
const sinon = require('sinon');
const localAuth = require('../../src/server/auth/local');
describe('decodeToken()', function() {
var clock;
beforeEach(function() {
clock = sinon.useFakeTimers();
});
afterEach(function() {
clock.restore();
});
it('should return a decoded payload', function (done) {
const token = localAuth.encodeToken({
id: 1
});
should.exist(token);
token.should.be.a('string');
clock.tick(36001000000);
localAuth.decodeToken(token, (err, res) => {
should.exist(err);
res.should.eql('Token has expired.');
done();
});
});
});
ли нижеприведенную работу ответа для вас? – anoop