gpt4 book ai didi

node.js - Sequelize 模型单元测试

转载 作者:搜寻专家 更新时间:2023-10-31 23:04:59 25 4
gpt4 key购买 nike

我有一个 User sequelize 模型,它有一个 beforeCreate Hook ,使用 bcrypyt 加密密码。 Bcrypyt 由模型使用 require 语句加载为依赖项。

现在,我正在为我的模型编写测试,我想编写一个测试来确保 bcrypt 在创建时对密码进行哈希处理。

目前,我在 User 模型上添加了一个 setter 来设置 bcrypt 对象。在我的测试中,我可以使用 sinon 创建 spy 并使用 setter 注入(inject) spy 并确保在创建时调用它。

这是正确的做法吗?我感觉好像我正在为我的测试创建一个 setter,它没有其他目的。

最佳答案

如何测试是开发社区中宗教争论的焦点。我的观点是,只要您正在 测试,具体如何完成是一个偏好问题。我倾向于编写尽可能像我的应用程序一样运行的测试。

如果您想确保 bcrypt 在创建时正确散列用户密码,请创建一个用户,保存它,然后检查密码。

这可以通过确保测试数据库正在运行来进行更多工作来进行测试,但我发现它提供了良好的结果。设置和拆卸非常易于编写脚本。

对于此示例,您甚至不需要测试框架来测试此行为。

var User = require( './User' )
var BCRYPT_HASH_BEGINNING = '$2a$'
var TEST_PASSWORD = 'hello there'

User.create({ password: TEST_PASSWORD }).then( function( user ){
if( !user ) throw new Error( 'User is null' )
if( !user.password ) throw new Error( 'Password was not saved' )
if( user.password === TEST_PASSWORD )
throw new Error( 'Password is plaintext' )
if( user.password.indexOf( BCRYPT_HASH_BEGINNING ) === -1 )
throw new Error( 'Password was not encrypted' )
})

关于node.js - Sequelize 模型单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29697494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com