2016-09-11 6 views
0

일부 코드를 테스트하기 위해 Lab을 사용하려고합니다. 그러나 어떤 이유로 올바른 페이로드를 넣을 때 코드가 아무 것도하지 않습니다. 거기에 더 페이로드 없거나 그것이 내가 응답 얻을 다음을 내 조이 검증과 일치하지 않도록hapijs가있는 server.inject가 올바른 응답을 반환하지 않습니다.

'use strict'; 

const Server = require('../server'); 

const options = { 
    method: 'POST', 
    url: '/api/users', 
    payload: JSON.stringify({ mobile: '3342329224' }) 
}; 

Server.inject(options, (response) => { 

    if (response) { 
     console.log(response.payload); 
    } 
    else { 
     console.log('Nada'); 
    } 
}); 

내가 코드를 편집하는 경우 :

{"statusCode":400,"error":"Bad Request","message":"child \"mobile\" fails because [\"mobile\" must be larger than or equal to 10]","validation":{"source":"payload","keys":["mobile"]}} 

module.exports = { 
    method: 'POST', 
    path: '/api/users', 
    config: { 
     auth: false, 
     handler: (request, reply) => { 

      //looks up payload in db otherwise creates entry 
      User.findOne({ 
       mobile: request.payload.mobile 
      }, (err, user) => { 

       if (err) { 
        throw err; 
       } 
       if (user) { 
        // uses twillio to send code 
        sendVerificationText(user, (err, result) => { 

         if (err){ 
          throw err; 
         } 
         if (result === true) { 
          // this is what I expect to happen when testing 
          reply('code sent').code(201); 
         } 
         else { 
          throw Boom.badRequest(err); 
         } 
        }); 
       } 
       else { 
        // the user should exist so.... 
        const user = new User(); 
        user.mobile = request.payload.mobile; 
        user.admin = false; 
        user.save((err, user) => { 

         if (err) { 
          throw Boom.badRequest(err); 
         } 
         sendVerificationText(user, (err, result) => { 

          if (err){ 
           throw err; 
          } 
          if (result === true) { 
           reply('code sent').code(201); 
          } 
          else { 
           throw Boom.badRequest(err); 
          } 
         }); 
        }); 
       } 
      }); 
     }, 
     // Validate the payload against the Joi schema 
     validate: { 
      payload: createUserSchema 
     } 
    } 
}; 

을 약속 반환받을하지 않는 것 이 코드는 서버를 실행하고 수동으로 API를 테스트 할 때 작동한다고 언급해야합니다. 나는 그것을 이해할 수 없다.

+0

크롬 개발자 도구를 사용하여 검사 할 것을 제안합니다. 서버에 보내는 실제 요청을 수동으로 테스트하는 데 사용하는 요청과 비교하십시오. 요청이 생성 될 때 약간 다른 것으로 보입니다. –

+0

나는 hapijs에 익숙하지 않다. 하지만 내 첫 번째 추측은 설명서를 읽는 것으로, 아마도 서버 코드는 다음과 같아야합니다. request.모바일 대신 request.payload.mobile? 그냥 내가 벗어날 수있을 것 같아. –

+0

나는 벗어났다. 나는 약간의 연구를했고 유사한 프로젝트를 만들려고 노력했다. 조이 유효성 검사가 중단되는 문제를 발견했습니다. 그 발견에 대한 대답 게시. –

답변

0

원래 답변을 얻지 못해 죄송합니다. 시험에 다시 참여하기 위해 실험실에서 시험해 보았습니다. https://github.com/davethomas11/stackoverlfow_Q_39432656/blob/master/test/users.js

나에게 걸림이없는 것 같습니다. 예상 된 응답 코드가 전송됩니다.

당신이 출력으로 무엇을보고 호기심
lab.test("user post", function (done) { 

    const options = { 
     method: 'POST', 
     url: '/api/users', 
     payload: JSON.stringify({ mobile: '3342329224' }) 
    }; 

    Server.inject(options, (response) => { 

     if (response) { 
      console.log(response.payload); 
     } 
     else { 
      console.log('Nada'); 
     } 

     Code.expect(response.statusCode).to.equal(201); 
     Code.expect(response.payload).to.equal("code sent"); 
     done(); 
    }); 
}); 

당신이 테스트를 실행 : 실험실의 설명서에 따라 코드 라이브러리 (새로운 의존성)를 사용하여 함수에 주장의 나는 몇 가지를 넣어? 커맨드 라인이 당신을 기다리고 있습니까? 불일치에 대한 테스트가 구현 된 방법에 대한 내 github 프로젝트를 확인하십시오. 희망이 당신에게 도움이 되길 바랍니다.

아 .. 당신은 끝을 위해 당신이 당신의 테스트 내에서() 당신이 완료 호출 할 필요가 무엇인지)가 걸려 아마 왜

참조 원래 답변 : 내 능력을 최대한 발휘하여 환경을 재창조했습니다. hapi.js 프레임 워크가 마음에 든다. 아주 좋아! 서버를 빨리 얻을 수있는 방법. 엄지 손가락. 좋은 선택. 내가 createUserSceme은 가정

validate: { 
      payload: createUserSchema 
     } 

: 당신이 당신의 유효성 검사를 설정 위치를 찾을 것이다 솔루션에서 https://github.com/davethomas11/stackoverlfow_Q_39432656

: 그래서 여기

내가 당신 게시 된 코드를 기반으로 조롱에 의해 발견 것입니다 함수를 페이로드 값으로 설정합니다. 함수 인 경우 요청이 중단되어 반환되지 않습니다. 따라서 약속이 돌아 오지 않는 것처럼 보이는 행동. 서버가 응답하지 않습니다. 이를 다음과 같이 변경하면 ...

그러면 모두 정상이며 유효성 검사를 계속할 수 있습니다. 따라서 여기에서 목표는 validate의 값이 객체인지 확인하는 것입니다.

나는 너에게 맞춰서 createUserSchema를 조롱했다. 그래서 당신이 다음 문제의 맨 아래로 가고 싶다면. 더 많은 코드를 게시하십시오. 더 많은 도움을 줄 수 있는지 기꺼이 알려 드리겠습니다.) (Nacros 시즌 2를 더 보러 가면 내일 다시 확인해 보겠습니다.)

+0

함수로 변경했을 때'TypeError : createUserSchema가 함수가 아닙니다 .' – Grouchy

+0

저는 변수 이름을 기반으로 한 함수라고 생각했습니다. 추가 한 새 코드를 확인하십시오. –

+0

@Grouchy - Joi 스키마 https://github.com/davethomas11/stackoverlfow_Q_39432656/commit/869f806ab5d69caf9eec783a451dfedbf026e672와 일치하도록 테스트 소스를 업데이트했습니다. 모든 것이 작동하며 서버가 멈추지 않습니다. 내 다음 추측은 sendVerificationText 함수를 살펴 보는 것입니다. 문제는 sendVerificationText가 반환되지 않아 문제가 발생한다는 것입니다. sendVerificationText도 게시 할 수 있습니까? –