2016-09-11 8 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.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: { 
      payload: createUserSchema() 
     } 

それでは、私たちは大丈夫です、そして、検証は続けられます。したがって、ここでの目的は、validateの値がオブジェクトであることを確認することです。

私はあなたのcreateUserSchemaを推測して嘲笑しました。だから、もしあなたが次の問題の底に到達したいのであれば。もっとコードを投稿してください。私がもっと助けることができるかどうかを喜んで試してみましょう=)(Nacrosのシーズン2をもう少し見て、明日に戻ってきます)

+0

これを関数に変更すると、 'TypeError:createUserSchemaは関数ではありません.' – Grouchy

+0

私はそれが変数名に基づいた関数であると推測していました。追加した新しいコードをチェックアウトします。 –

+0

@Grouchy - あなたのJoiスキーマ(https://github.com/davethomas11/stackoverlfow_Q_39432656/commit/869f806ab5d69caf9eec783a451dfedbf026e672)に一致するテストソースを更新しました。すべてが機能し、サーバーはハングしません。私の次の推測はsendVerificationText関数を見ることです。問題は、sendVerificationTextが返されていないために、あなたが見ている動作を起こしている可能性があります。 sendVerificationTextも投稿できますか? –

関連する問題