エクスプレスのテストバックエンドサーバー
6957 ワード
最近、ノードについて学び、バックエンドAPIサーバーを表現しています.エクスプレス.JSは、Ruby on Railsと同様にMVCパターンを使用して、RESTful CRUD APIを構築することができます.すべてのクルージング作品を表現する方法を学習しながら、私は物事が正しく動作していることを確認する機能をテストしたかった.このブログ記事は、JESTフレームワークとスーパーテストライブラリを使用して、明示的バックエンドAPIのルートのCRUD機能をテストする方法を説明します.
エクスプレスサーバー
私は、あなたがこの記事のために走っている急行サーバーを持っていると仮定します、しかし、下記はこの記事の中でテストを得るために単純なサンプル・アプリです(下記の通り、私はExpressサーバーを構築することに関する若干の追加記事を共有します).下記のコードでは、2つの例を見つけます
Jest & Supertestの設定
まず第一に、テスト環境を設定しなければなりません.以下はJestとSuperTestの取得と実行の手順です.
依存関係のインストール
テスト環境の設定
テスト環境を設定するには ノート
書き込みテスト
私たちは新しい仕事をするつもりです
輸入
我々は最初にいくつかの依存関係をインポートする必要があるので、我々はExpressのサーバーをテストすることができます.これらは、我々のトップで行きます
すべてのユーザーを得る
我々が必要とする最初のものは、我々の初期です
IDを取得する
ので、我々の最初のテストを書いている.今2回目のテストでは、同様のテストを行います
テストを実行する
すごい!我々は、2つのサンプルの機能を確認する2つのテストを書いている
結論
今、あなたのエクスプレスAPIにいくつかのテストを追加するリソースがあります!うまくいけば上記の例では、あなたの急行サーバーの機能を設定し、テストする方法についていくつかの初期の理解を得るのに役立つ!私はExpressのバックエンドAPIの要求をテストする私の知識を展開したい、これは私自身のアプリケーション内でテストを設定する方法です!
私がエクスプレスを学ぶのを助けるために使用したいくつかの追加のリソース.サーバーをテストする方法
Node.js Rest APIs example with Express, Sequelize & MySQL by bezkoder
Building an Express API with Sequelize CLI and Unit Testing! by Bruno Galvao
Hopscotch.io - a tool to send server requests and see the responses
この記事は、あなたの急行サーバーをテストすることから始めるのを助けましたか?コメントや推奨事項に対応!
エクスプレスサーバー
私は、あなたがこの記事のために走っている急行サーバーを持っていると仮定します、しかし、下記はこの記事の中でテストを得るために単純なサンプル・アプリです(下記の通り、私はExpressサーバーを構築することに関する若干の追加記事を共有します).下記のコードでは、2つの例を見つけます
GET
エンドポイントは、いくつかのサンプルコードと一緒にあなたのルートは、実際にどのように見えるときに構築される可能性がありますアイデアを与える.// server.js
import express from 'express';
const app = express();
app.get('/users', function(req, res) {
res.json({ users: 'allUsers' });
// Real code from my application below
// model.User.findAll().then (users => {
// res.status(200).json({ users });
// }).catch(error=>{
// console.log(error)
// req.status(500).send(error)
// })
});
app.get('/users/3', function(req, res) {
res.json({ user: 'user3' });
// Real code from my application below
// const { id } = req.params;
// model.User.findOne({
// where: { id: Number(id) }
// }).then(user=>{
// res.status(200).json({ user });
// }).catch(error=>{
// console.log(error)
// req.status(500).send(error)
// })
});
export const server = app;
上記のルートを見て、我々はGET
リクエスト:すべてのユーザーのための1つ、および選択ユーザーの1つ.我々のテストはGET
リクエストはステータスコードを返す200
, 有json
content typeと返されるプロパティを含めるusers
, or user3
).Jest & Supertestの設定
まず第一に、テスト環境を設定しなければなりません.以下はJestとSuperTestの取得と実行の手順です.
依存関係のインストール
npm install jest --save-dev
npm install supertest --save-dev
npm install cross-env --save-dev
テスト環境の設定
テスト環境を設定するには
package.json
あなたのエクスプレスアプリケーションのフォルダ.次の設定を実行することができますnpm test
CLI(テストデータベースのリセットを実行する)では、正確なテスト目的のために毎回データベースを移行・シードします.NODE_ENV=test
テスト環境を指定するために使用します.// package.json
"scripts": {
...
"test": "cross-env NODE_ENV=test jest --testTimeout=10000",
"pretest": "cross-env NODE_ENV=test npm run migrate:reset",
"migrate:reset": "npx sequelize-cli db:migrate:undo:all && npm run migrate",
"migrate": "npx sequelize-cli db:migrate && npx sequelize-cli db:seed:all",
}
我々は、我々を無視するために、冗談を必要とします./node_modules
フォルダのため、コードのこのスニペットをpackage.json
:...
"jest": {
"testEnvironment": "node",
"coveragePathIgnorePatterns": [
"/node_modules/"
]
},
...
では、テストを実行してみましょうnpm test
コマンドラインで.テスト環境をアップロードして実行しているので、テストを開始することができます!書き込みテスト
私たちは新しい仕事をするつもりです
test.js
ファイルは、我々の目標はGET
リクエスト:/users
and /users/3
.輸入
我々は最初にいくつかの依存関係をインポートする必要があるので、我々はExpressのサーバーをテストすることができます.これらは、我々のトップで行きます
test.js
ファイル.//test.js
const server = require('../index.js');
const supertest = require('supertest');
const requestWithSupertest = supertest(server);
あなたは、我々が使用していることに気づくでしょうrequestWithSupertest
, 各テストをサーバーにリンクします.すべてのユーザーを得る
我々が必要とする最初のものは、我々の初期です
describe
我々のテストの両方を収容するブロック.このテストでは、どのようにチェックされます/user
ルート関数を取得します.describe('User Endpoints', () => {
it('GET /user should show all users', async () => {
const res = await requestWithSupertest.get('/users');
expect(res.status).toEqual(200);
expect(res.type).toEqual(expect.stringContaining('json'));
expect(res.body).toHaveProperty('users')
});
});
上のコードでawait
to requestWithSupertest.get('/users')
, 我々が前進する前に満たされる必要がある見込みをテストしているので.それから、私たちは200
状態json
content type、および応答体がusers
プロパティ.これらの3つの予想は、我々がこのルートの機能性のためにテストしたかったものを満たします.IDを取得する
ので、我々の最初のテストを書いている.今2回目のテストでは、同様のテストを行います
/users/3
ルートこのテストでは、ターゲットのユーザーIDの取得ルートのテスト方法を示すことになっていますdescribe
以上で定義したブロック. it('GET /user/:id should show a user', async () => {
const res = await requestWithSupertest.get('/users/3')
expect(res.statusCode).toEqual(200)
expect(res.body).toHaveProperty('user3')
});
テストを実行する
すごい!我々は、2つのサンプルの機能を確認する2つのテストを書いている
GET
路線では、コマンド行でテストを実行します.npm test
あなたはテストスイートで2つのパッシングテストを参照してくださいする必要があります!結論
今、あなたのエクスプレスAPIにいくつかのテストを追加するリソースがあります!うまくいけば上記の例では、あなたの急行サーバーの機能を設定し、テストする方法についていくつかの初期の理解を得るのに役立つ!私はExpressのバックエンドAPIの要求をテストする私の知識を展開したい、これは私自身のアプリケーション内でテストを設定する方法です!
私がエクスプレスを学ぶのを助けるために使用したいくつかの追加のリソース.サーバーをテストする方法
Node.js Rest APIs example with Express, Sequelize & MySQL by bezkoder
Building an Express API with Sequelize CLI and Unit Testing! by Bruno Galvao
Hopscotch.io - a tool to send server requests and see the responses
この記事は、あなたの急行サーバーをテストすることから始めるのを助けましたか?コメントや推奨事項に対応!
Reference
この問題について(エクスプレスのテストバックエンドサーバー), 我々は、より多くの情報をここで見つけました https://dev.to/lukekyl/testing-your-express-js-backend-server-3ae6テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol