Sequelize模型单元测试

sb8*_*b89 4 testing node.js sinon sequelize.js

我有一个Usersequelize模型,它有一个beforeCreate使用加密密码的钩子bcrypyt.Bcrypyt使用require语句由模型加载为依赖项.

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

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

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

Jos*_*lik 6

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

如果要确保bcrypt在create上正确哈希用户密码,请创建用户,保存并检查密码.

这可以更多地确保测试数据库运行测试,但我发现它提供了良好的结果.设置和拆解非常易编.

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

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' )
})
Run Code Online (Sandbox Code Playgroud)