2016-12-03 4 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()'만 있습니다. 이제, 'at Promise (api \ paths \ users \ utils.js : 24 : 12)'에서 오류의 위치를 ​​물으면 'crypto.randomBytes' 암호가 처음 사용됩니다. – Johnny

+1

글쎄, 이미 crypto.randomBytes에 전달할 크기를 확인하여 0보다 크거나 같습니까? – pietrovismara

답변

1

덕분에 해결책으로 나를 가리킨 pietrovismara 덕분입니다.

salt_length은 숫자가 아닌 salt_length입니다. 나는 논쟁을 밖으로 인쇄하고 있었고 나는 그들이 '정확하다'는 것을 알았지 만 분명히 올바른 유형이 아니란 것을 알 수 있었다. (그러므로 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