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' )
})
我有一个 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' )
})