Я создал sinon STUB, который заглушки ("password-hash": "^ 1.2.2") метод генерации PasswordHash.Здесь происходит, когда я запускаю метод PasswordHash.generate ('mnop') в файле TEST, он работает.Но когда метод PasswordHash.generate вызывается в реальном коде, он не работает, и оригинальный метод PasswordHash.generate вызывается вместо вызова заглушенного.
import * as sinon from 'sinon'
import UserDetails from '../../src/model/UserDetails';
import * as ClassValidator from "class-validator";
import * as PasswordHash from 'password-hash';
let sandbox: sinon.SinonSandbox;
describe('Model > LoginUserDetails', () => {
let userDetailsLetralObject = {
email: 'zia@g.com',
password: 'Savanur1',
roles: ['lecturer'],
departments: ['ec']
};
const userDetails = new UserDetails(userDetailsLetralObject.email,
userDetailsLetralObject.password,
userDetailsLetralObject.roles,
userDetailsLetralObject.departments,
false
);
beforeEach(() => {
sandbox = sinon.createSandbox();
});
afterEach(() => {
sandbox.restore();
});
describe('constructor testing...', () => {
test('With password hash', async (done) => {
const passwordHashStub = sandbox.stub(PasswordHash, 'generate').returns('hashedPassword')
console.log(PasswordHash.generate('mnop'))
// Here it prints string 'hashedPassword' i.e returned buy passwordHashStub method
let userDeatilsObj = await new UserDetails(
userDetailsLetralObject.email,
userDetailsLetralObject.password,
userDetailsLetralObject.roles,
userDetailsLetralObject.departments,
true);
expect(passwordHashStub.withArgs(userDetailsLetralObject.password).calledOnce).toBeTruthy()
// This will check for not equal
expect(userDeatilsObj).not.toEqual(userDetails)
expect(userDeatilsObj.validatePassword('hashedPassword')).toBeTruthy()
done();
});
});
});
import * as PasswordHash from 'password-hash'
class UserDetails {
constructor(email: String, password: String, roles: String[], departments: String[], hashPassword: Boolean) {
this.email = email
/* In this console.log it will call the original PasswordHash.generate method
* instead of called stubbed one (means it will print big hashed password)
*/
console.log(PasswordHash.generate('mnop')
this.password = hashPassword ? PasswordHash.generate(password.toString()) : password
this.roles = roles
this.departments = departments
}
validatePassword(password: String): Boolean {
// return PasswordHash.verify(password.toString(), this.password.toString());
return password.toString() === this.password.toString();
}
}
export default UserDetails