2016-12-03 9 views
0

私はパスワードハッシュ関数をテストしようとしていますが、いくつかのTypeErrorエラーのために失敗を続けています。node.crypto関数のテスト時にモカがエラーを投げる

私は他のファイルから呼び出そうとしていて、関数が正常に機能していると確信しています。ここで

は関数である。ここでは

exports.hashPassword = (password) => { 
     return new Promise((resolve, reject) => { 

     crypto.randomBytes(salt_length, (err, buf) => { 
      if (err) reject(err); 

      const salt = buf.toString('base64'); 

      crypto.pbkdf2(password, salt, iterations, keylen, digest, (err, key) => { 
      if (err) reject(err); 

      const hashedPassword = '{X-PBKDF2}:'+digest+':'+keylenB64+':'+iterationsB64+':'+salt+':'+key.toString('base64'); 
      resolve(hashedPassword); 
      }); 
     }); 
     }); 
    }; 

は失敗テストです:

describe('users',() => { 

     describe('utils',() => { 

     it('should hash a password', (done) => { 

      const password = 'secret'; 

      utils.hashPassword('secret') 
      .then((hash) => { 
      console.log('Hash: '+ hash); 
      done(); 
      }) 
      .catch((err) => { 
      console.log(err); 
      done(err); 
      }); 
     }); 
     }); 
    }); 

そして、これは 'エラー' である:

1 failing 

1) users utils should hash a password: 
    TypeError: size must be a number >= 0 
    at Promise (api\paths\users\utils.js:24:12) 
    at Object.exports.hashPassword (api\paths\users\utils.js:14:10) 
    at Context.it (api\paths\users\utils.test.js:30:13) 

は誰に任意のアイデア理由を持っています?

私はmochashouldを使用しており、nodeに発展しています。

+0

エラーを投げ関数である明確ではありません。明確にできますか? – pietrovismara

+0

確かに、 'utils.js'というファイルに存在する' hashPassword() '関数は1つだけです。さて、あなたが 'at Promise(api \ paths \ users \ utils.js:24:12)のどこにエラーがあるのか​​を尋ねるなら、これは暗号' crypto.randomBytes'の最初の使用です – Johnny

+1

既にcrypto.randomBytesに渡しているサイズをチェックして0以上になっていますか? – pietrovismara

答えて

1

pietrovismaraのおかげで、私は解決策を指摘しました。

問題はsalt_lengthが数字ではなく文字列であることでした。私は引数を印刷していましたが、それらが正しいと分かりましたが、明らかに正しいType(したがってTypeError、私は推測します...)

私は.envファイルで引数を保持しています。 dotenvパッケージは明らかに単純な文字列として読み込まれます(それはすべきです)...なぜ私が別のファイルから関数をテストしていたときに働いたのかという理由は、そのインスタンスでは引数を使用していないので、.env以下のようなものを持っている:

const salt_length = process.env.SALT_LENGTH || 128;

モカcorreclty .env値(文字列)を使用しますが、だましたときにされました私はこれらの環境変数をロードしていなかったファイルとラウンドします。

私は今日何かを学びました。私は、充電して目の前に物事を見るのではなく、疲れて帰宅する必要があります。また

mochaは約束をサポートしているので、「正しい」のテストケースは(shouldを使用して)次のようになります。

describe('users',() => { 

    describe('utils',() => { 

     it('should hash a password',() => { 
     return utils.hashPassword('secret').should.be.fulfilled(); 
     }); 

    }); 
    }); 
+1

あなたは '.catch()'を削除して、モカがあなたのためにそれを扱わせることさえできます。 – robertklep

+1

@robertklep私の編集コードを参照してください;) – Johnny

関連する問題