ユニットテストjest初認識

4608 ワード

ユニットテストjest、この反復は新しいフレームワークの圧測をする時初めてjestに接触して、今回総括して更に理解して、後で開発の中でjestを利用して自分のコードの品質を高めて、bugを減らして、開発の効率を高めます。


テストは、コードが予想通りに動作するかどうかを検証する手段です.テストは3つの種類に分けることができます:ユニットテスト、集積テスト、機能テスト.Jestはユニットテストの一種であり、ユニットテストはモジュールテストとも呼ばれ、プログラムモジュールに対して正確性検査を行うテスト作業であり、ユニットは単一のプログラム、関数、プロセスなどであってもよい.私たちはインタフェースを書くとき、あるインタフェースのcontroller層に対してテストを行うことができる.例えば、パラメータが規定通りに伝わってこない、パラメータのタイプを変える.例えば、パラメータの構造、パラメータのタイプ、error、errorCodeなど、ユニットテストによって多くの問題を測定することができます.テストのメリットはたくさんあります.バグを減らし、コードの品質を高め、製品の性能を高め、早めに問題を発見し、問題をタイムリーに解決し、デバッグ時間を減らし、安心して再構築します.Jestは、Facebookから公開されたオープンソースのJasmineベースのJavaScriptユニットテストフレームワークです.Jestの利点は、1つのプロジェクトのテストを開始するのにかかる時間と認知負荷をできるだけ減らすことであり、インストール構成が簡単で、非常に使いやすく、ほとんど構成がゼロです.
Babelをサポートし、ES 6の高度な構文を簡単に使用します.
Webpackをサポートし、私たちのプロジェクトを管理するのに便利です.
TypeScriptをサポートしていますので、私たちのプロジェクトでは安心してTypeScriptを使ってコードを書くことができます.
高速コマンドラインインタフェース、Mockツールセット、およびその自動モジュールMockシステム.
私たちのフレームワークにはtestを構成するコマンドがあります.
"scripts": {
    "test": "one-jest",
}

このコマンドを実行する場合は、プロジェクトのルートディレクトリで直接実行できます.npm run testでは、プロジェクトの例を2つ挙げます.
test('  getwaitmyreply   error   false', async () => { 
     let  requestInvoke = {             
     url:"http://127.0.0.1:8080/content/api/getwaitmyreply", 
     method: "POST",
     dataType: "form"
};
let data = await TeService(requestInvoke)({
     sourceType: "0",
     pageSize: 2,
     pageNo: "1",
     userId: "240000000084992760"
});
expect(data.data.error).toEqual(false); });

test()にはテストが含まれています.ここでは、自分で書いたインタフェースを直接要求する非同期のテストを行いました.expect().toEqual():これは断言であり、プログラム開発者が予想した結果を検証し、結果が予想と等価かどうかを判断するためにプログラムに置かれた論理(例えば、結果が真または偽の論理判断式)であり、あるテーブルオブジェクトの値を検査したい場合はtoEqual()を使用します.toEqual()は検査対象または配列の各領域を再帰的に遍歴するため、だからここではtoEqual()を使うのが一番正確です.
toEqual()はmatchersで、Jestはmatchersを使用して異なる方法であなたの結果をテストします.上記の例では、ビジネスロジック上のエラーが発生し、原因がわかりにくい場合は、次のようにテストコードを書く必要があります.
import { BaseController } from 'te-one';
import { GetMyAskBean, GetMyAskViewModel } from '../../src/controller/qanda/myask/service/index.interface';
import { MyAskRequest } from '../../src/business/myask/service/index.interface';
import getMyAskBus from '../../src/business/myask/index'; 
import { API_ERROR, NOT_LOGIN, PARAM_ERROR } from '../../src/common/constants.error';

let res = {
   "sourceType": "0",
   "pageSize": 2,
   "pageNo": "1",
   "userId": "240000000084992760"
};
export class GetMyAskController extends BaseController {
async getMyAsk(res) {
let vm_data = new GetMyAskViewModel();
let viewModel = this.getResObj();
let bus = new getMyAskBus();
let form = new GetMyAskBean(res.sourceType, res.pageSize, res.pageNo, res.userId);

if (!form.validate()) {
   viewModel.error = true; viewModel.errorCode = PARAM_ERROR;       
   viewModel.errorMessage = " "; return viewModel;
}

let getMyAskReq = new MyAskRequest(); 
getMyAskReq.sourceType = res.sourceType; 
getMyAskReq.pageSize = res.pageSize; 
getMyAskReq.pageNo = res.pageNo; 
getMyAskReq.userId = res.userId; getMyAskReq.pageType = '0';

try {
    let getMyAskResult = await bus.getMyAskResp(getMyAskReq);
    this.log(">>>>> getmyask:  : ", getMyAskReq, ">>> res : ", getMyAskResult);
    if (!getMyAskResult.data || getMyAskResult.data.retcode != 0 || 
    getMyAskResult.data.retdesc != 'success') {
         viewModel.error = true; viewModel.errorCode = API_ERROR;         
         viewModel.errorMessage = " "; return viewModel;
     }
     viewModel.error = false; viewModel.errorCode = ""; 
     viewModel.errorMessage = ""; vm_data.askAnswerLastDate =
     getMyAskResult.data.body.askAnswerLastDate;
     vm_data.totalAskNum = getMyAskResult.data.body.totalAskNum;     
     vm_data.waitAnswerLastDate =
     getMyAskResult.data.body.waitAnswerLastDate;
     vm_data.askList = getMyAskResult.data.body.askList; viewModel.data = vm_data;
     return viewModel;
} catch (error) {
    this.error("getmyask ===> req:" + JSON.stringify(res) + "
    resp:" + JSON.stringify(error)); }
} }
    let getMyAskData = new GetMyAskController();
    it('  GetMyAsk   error   false', async () => {
        expect.assertions(1);
        const data = await getMyAskData.getMyAsk(res); expect(data.error).toEqual(false);
});

上はcontrollerレイヤのコードです.インタフェースで発生する可能性のある問題をテストします.これらのコードでテストすることもできますし、問題に迅速に位置決めすることもできます.