私はテスト駆動開発の初心者です。ログインAPIをテストしたいのですが、データベースでテストを実装する方法を完全に理解できていません。 ?MochaとChaiを使用してログインAPI NodeJをテストする方法
答えて
まず、私もこのトピックの専門家ではありませんが、私はかなりの時間このメソッドを使用しています。誰かが私が書いていることが間違っている、あるいはやや誤解を招くことがわかったら、私を修正してください。私は非常に批評家や意見に開放されています。
TDD方式では、名前のとおり、実装前にテストを書く必要があります。基本的に、テストを書いて、失敗しているのを見て、実装を書いて、テストが合格するまで繰り返します。
expressを使用している場合は、supertest
モジュールを使用することができます。彼らはそれを使用する方法はsuperagent
に似ています。
npm install supertest --save-dev
ここでは、mochaとchaiで使用する方法の非常に簡単な例を紹介します。だからここ
は特急アプリの例です:
// file: app.js
const express = require('express');
const app = express();
// your middlewares setup goes here
const server = app.listen(8000,() => {
console.log('Server is listening on port 8000');
});
module.exports = app;
そしてここでは、ログインAPIの例のテストケースです:
// file: test/api.js
const request = require('supertest');
const app = require('../app');
const expect = require('chai').expect;
describe('Login API', function() {
it('Should success if credential is valid', function(done) {
request(app)
.post('/api/v1/login')
.set('Accept', 'application/json')
.set('Content-Type', 'application/json')
.send({ username: 'username', password: 'password' })
.expect(200)
.expect('Content-Type', /json/)
.expect(function(response) {
expect(response.body).not.to.be.empty;
expect(response.body).to.be.an('object');
})
.end(done);
});
});
このコマンド
node_modules/mocha/bin/mocha test/**/*.js
でそれを実行することができます
上記の例では、/ api/v1/loginパスにPOSTメソッドを使用してログインAPIを実装することを前提としています。また、json形式でデータを受信して応答することを前提としています。
{
username: 'username',
password: 'password'
}
その後、それはあなたのAPIは200レスポンスコードで応答することを期待:例のテストケースは、それが/ API/V1 /次のデータにログインするPOSTリクエストを送信しようとしていることは何
.expect(200)
コードが200以外の応答を受け取った場合、テストは失敗します。
あなたの応答のContent-Type
はapplication/json
であると予想します。期待が現実を満たしていなければ、テストも失敗します。
以下のこのコード:
.expect(function(response) {
expect(response.body).not.to.be.empty;
expect(response.body).to.be.an('object');
})
それはあなたのサーバーからの応答をチェックします。上記のようにチャイのexpect
を関数本体の中に使用することができます。 supertestにはexpect
メソッドもあります。しかし、supertestの期待値とchaiの期待値の両方を使用する方法は異なります。
最後に、done
コールバックでend
関数を呼び出して、テストケースを正しく実行できるようにします。
supertestの使用方法の詳細については、supertestのマニュアルを参照してください。あなたはすべてのテストケースを実行する前に、データベース接続を維持する必要がある場合は
をテストする前に、データベース接続を確立
は、ここにアイデアだ:
はtest
ディレクトリ内に別のファイルを作成します。たとえば、database_helper.js
です。次に、次のコードを書いてください:
before(function(done) {
// write database connection code here
// call done when the connection is established
});
これまで私はmongooseで試してみました。
私は役立つことを願っています。
いくつかの考えを追加する:私はususally各テストの前に特定のデータでデータベースを初期化する。あなたは '' beforeEach(function(done){}); '' 'を使うことができます。 –
エラーが発生しましたhttps://scontent-sit4-1.xx.fbcdn.net/v/t34.0-12/17821101_1469610449726804_1117021897_n.png?oh=0faa94eb2e5a915d27ab03017eda40e2&oe=58EADD80 –
@RizwanPatelリンクを開くことはできませんが、私は答えを編集しました。私はエラーに感謝しなかった、ありがとう! – winter
- 1. mochaとchaiでテストする
- 2. MochaとChaiでWebアプリケーションをテストする
- 3. 酵素、mocha、chaiを使ってカスタムReact関数を単体テストする方法
- 4. mocha、chai、sinonでangularJsで$ q約束をテストする方法
- 5. mocha、chai、chai-enzimeをreact-create-appと一緒に使用
- 6. ユニットMocha、Chai、およびSinonを使用したNode.jsアプリケーションのテスト
- 7. エクスプレスとパスポートのテストOAuth2 with Mocha and Chai
- 8. mocha、zombie、chaiを使用して不明なテストに失敗しました
- 9. mocha、chai、chaiAsPromisedとSinonとのjs約束事をテストする
- 10. MochaとChaiでテストするデータベースをロードする
- 11. ES6クラスのChai/Mocha単体テストの作成方法React component?
- 12. mocha chaiとsinonと独立してjavascriptの機能をテストする方法は?
- 13. EmberのmochaとChaiで2つの `done`関数を使用
- 14. ChaiでMochaのパラメータを使って関数の戻りをテストする
- 15. react/reduxでのMocha/Chaiテスト:非同期アクション用にカスタムミドルウェアを使用
- 16. mocha/chaiを使用したAJAXリクエスト内のwindow.location.hrefのユニットテスト
- 17. Mochaテストが実行されていないMeteorを使ってChaiアサーション
- 18. ユニットテストmocha chaiでの引数
- 19. Mocha、Chai、Sinonでキー入力イベントをシミュレートしてテストしますか?
- 20. REST APIがファイルを提供するようにmocha/chaiを使用していますか?
- 21. Async Mochaテスト(Chaiアサーションライブラリを使用)は失敗しますが、合格とマークされます
- 22. Bluebird promiseがmocha/chaiテストで動作しない
- 23. useFakeTimers mocha chai sinon - テストで正しい結果ではない
- 24. 名前空間モジュールのパラダイムでMocha/Chaiでテストを書く
- 25. mocha BDDテストからAPI htmlドキュメントを生成する方法は?
- 26. mocha/chai test予期しないトークン=>
- 27. Mocha/Chaiを使用したセレン - 偽を返す方法はDOMに存在しない項目です
- 28. Mochaで約束をテストする方法
- 29. テスト用にmocha/chaiを通してファイルをどのようにアップロードしますか?
- 30. 少数のWebdriver IO Mocha Chaiの質問
あなたはどのフレームワークを使用していますか? – winter
ORMとしてsequelize(CLI)を使用してexpressを使用しています。 –
ご迷惑をおかけして申し訳ありません。つまり、どのようなWebフレームワークを使用していますか? – winter