【问题标题】:verifying contents of a resolved promise via function call with chai-as-promised通过使用 chai-as-promised 的函数调用验证已解决的承诺的内容
【发布时间】:2015-03-01 00:47:42
【问题描述】:

我将 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_pa​​ssword 值。

根据文档,property() 调用使该属性成为断言的主题,这就是我尝试使用this 的原因,但我最终导致 bcrypt 抛出“不正确的参数”错误,我认为这是由于this 参考。

有人对如何正确执行此操作有建议吗?

注意:我确实打算用检查查询的模拟替换存根。

【问题讨论】:

    标签: javascript node.js testing sinon chai-as-promised


    【解决方案1】:

    您遇到的更多是 JavaScript 问题而不是测试问题。您所拥有的与以下内容基本相同:

    var result = bcrypt.compareSync('newTestPassword', this);
    
    return u.ChangePassword('testPassword', 'newTestPassword').should
                  .eventually.be.an.instanceof(User)
                  .and.have.property('encrypted_password')
                  .that.satisfy(result);
    

    这应该使问题更清楚。 this 在您的情况下是 mochas 测试函数上下文对象,而不是您的财产。

    .satisfy 需要一个函数,所以我会这样做:

    .that.satisfy(function(hash){
        return bcrypt.compareSync('newTestPassword', hash);
    });
    

    或使用.bind,虽然它可能更令人困惑:

    .that.satisfy(bcrypt.compareSync.bind(bcrypt, 'newTestPassword'));
    

    【讨论】:

    • 谢谢!我没有注意到satisfy 需要一个函数。也不清楚它将传递给函数的内容。我使用了第一个建议的解决方案,效果很好。我同意第二个在阅读中有点晦涩。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多