Sequelize 模型单元测试

Sequelize Model Unit Test

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

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

目前,我已将 setter 添加到设置 bcrypt 对象的 User 模型中。在我的测试中,我可以使用 sinon 创建间谍并使用 setter 注入间谍并确保在创建时调用它。

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

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

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

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

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

var User = require( './User' )
var BCRYPT_HASH_BEGINNING = 'a$'
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' )
})