我将 chai-as-promised 与 sinonjs 结合使用,但我无法弄清楚如何验证更改的密码。
我有类似以下代码的内容:
it('changes password if old password is valid', function(){
var u = new User({id: '1234567890', email:'user@email.com'});
var encrypted_password = bcrypt.hashSync('newtestPassword', bcrypt.genSaltSync(8), null);
sinon.stub(db, 'executeQuery', function() {
return q.fcall( function() {
return [ {u: { _data: { data: {flake_id: '1234567890', email:'user@email.com', encrypted_password: encrypted_password}}}}];
})
})
return u.ChangePassword('testPassword', 'newTestPassword').should
.eventually.be.an.instanceof(User)
.and.have.property('encrypted_password')
.that.satisfy(bcrypt.compareSync('newTestPassword', this));
});
哪里u.ChagePassword()
返回一个承诺。
我的问题是断言的最后一行 - 我希望能够从存根数据库响应和用户 bcrypt.compareSync() 中提取加密密码以检查它是否是正确的值,但我不清楚如何参考响应中的 encrypted_password 值。
根据文档,该property()
调用使该属性成为断言的主题,这就是我尝试使用this
但最终导致 bcrypt 抛出“不正确的参数”错误,我认为这是由于this
引用引起的。
有人对如何正确执行此操作有建议吗?
注意:我确实打算用检查查询的模拟替换存根。