Githubでビルドを渡すバッジを獲得✅! トラヴィスCIを使用してエクスプレスアプリをテストする


Travis CIはGithubのオープンソースプロジェクトのための無料のテストビルドを提供しています.あなたは、彼らの申し出に彼らを連れていかない愚か者であるでしょう.彼らの電子メール警報は、何度も私のプロジェクトを保存しました.
このチュートリアルでは、我々は継続的な統合(CI)のためのエクスプレスアプリを設定されます.我々が我々に約束するときはいつでもmaster ブランチ、トラヴィスCIは、リポジトリをクローンし、Linuxのクラウドビルドをスピンし、必要な依存関係をインストールし、テストを実行します!うまくいけば、彼らは通過!そうでなければ、我々は警告されます.

インストール


速成するpackage.json ファイル:npm init -y . 次に、エクスプレスを取得します.npm i express --save SupertestとJest、開発依存性:npm i supertest jest --save-dev .
またはrepository , これは、プロジェクトのライブの例として機能します!

アプリを急行から取る


ExpressのデフォルトのHello Worldアプリケーションは次のようになります.
// app.js

const express = require('express');
const app = express();
const port = 3000;

app.get('/', async (req, res) => res.status(200).send('Hello World!'));

app.listen(port, () => console.log(`Our app listening on port ${port}!`));
これは手動テスト用です.我々は、このアプリケーションを実行することができますし、右ページが返されていることを確認-しかし、我々は複雑なロジックで50ページを持っているかどうか?このプロセスを自動化したい.最初のステップはapp オブジェクト.テストを実行するとき、我々は生のHTTPサーバを必要としません.
私たちのハローワールドアプリケーションを変更しましょう.
// app.js

const express = require('express');
const app = express();

app.get('/', async (req, res) => res.status(200).send('Hello World!'));

// Don't listen, just export
module.exports = app; // <--
グレート.しかし、どのように我々は今、我々のアプリケーションを起動するのですか?使いましょうseparation of concerns を呼び出し、listen() 別のファイルでserver.js (これもapp オブジェクト!
// server.js

const app = require('./app');
const port = 3000;

app.listen(port, () => console.log(`Our app listening on port ${port}!`))

我々のアプリケーションを起動するにはnode server.js . それを加えましょうpackage.json だから人々は単に使用することができますnpm start . デフォルトでは、ノード.JSはAを探すserver.js ファイルを明示しましょう.
"scripts": {
  "start": "node server.js"
},

テスト


一般的なパターンと呼ばれるフォルダ内のテストを配置することです__tests__ を返します.別のパターンは、テストされているファイルの名前を繰り返すことです.test 前に挿入.js . したがって、__tests__/app.test.js .
テストランナーとしてジェストを使用します.ジェスは中を見る__tests__ デフォルトの検索の一部として、任意のテストファイルを実行します.カスタムテストの検索を使用できます--testMatch .

By default [Jest] looks for .js, .jsx, .ts and .tsx files inside of __tests__ folders, as well as any files with a suffix of .test or .spec (e.g. Component.test.js or Component.spec.js). It will also find files called test.js or spec.js.


我々のテストの中で、スーパーテストは、我々の要求を模擬しますapp オブジェクト.モッキング要求は、サーバーを起動し、ライブリクエストを使用するよりも高速かつ予測可能です.また、簡単に書くことができますsetup and teardown メソッドが必要な場合.
// __tests__/app.test.js

const app = require('../app');
const request = require('supertest');

// `describe` is used for test components
describe('GET /', () => {

    // `it` is for individual tests
    it('responds with 200', async () => {
        await request(app)
            .get('/')
            .expect(200); // If the status code is not 200, this test will fail
    });
})
別の線を加えましょうpackage.json ので、我々のテストを実行することができますnpm test . 我々が使う理由start and test エイリアスは、私たちのソフトウェアは、開発者が初めてそれを拾うために予測されるように、それが他のパッケージと素敵に再生されます.
"scripts": {
  "start": "node server.js",
  "test": "jest"
},
npm test を返します.
 PASS  __tests__/app.test.js
  GET /
    √ responds with 200 (39ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        2.681s
Ran all test suites.

トラリスシス


ましょうget this code into a repository Githubにインストールし、Travis CI GitHub App . テストしているRIPOが有効になっていることを確認してください.

トラヴィスCIとしてtutorial 教えてください.

Add a .travis.yml file to your repository to tell Travis CI what to do.


我々の例では、それは簡単です.我々はノードのどのバージョンを超えて任意の追加設定を指定する必要はありません.JS私たちはテストビルドを使用します.トラバースCIは、デフォルトのテストエイリアスを使用しますnpm test .
# .travis.yml

language: node_js
node_js:
 - lts/* # Long Term Support
このファイルをGITHUBに委託して、すぐにテストビルドを待ちます.ビルドを見ることができますtravis-ci.com/{your-username}/{your-repo} , そして、物事がどこで間違っていたかを見るために、後で彼らをチェックしてください.あなたのトラビスCIビルドステータスバッジのためのマークダウンをつかむためにこのページを使用してください!

さえずるか、問題を上げるrepository あなたが問題に走るならば!
参加150 +人々は私にサインアップnewsletter プログラミングと個人の成長に!
私は技術についてつぶやきます.