Sequelize模型单元测试

时间:2015-04-17 11:06:39

标签: node.js testing sequelize.js sinon

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

现在,我正在为我的模型编写测试,我想编写一个测试,确保bcrypt在创建时隐藏密码。

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

这是正确的方法吗?我觉得好像我正在为我的测试创建一个二传手,而且它没有任何其他目的。

1 个答案:

答案 0 :(得分:6)

如何进行测试是发展界的一个宗教辩论点。我认为,只要您进行测试,确切地说如何完成这是一个偏好问题。 我倾向于编写尽可能像我的应用程序一样的测试。

如果您想确保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' )
})