検索
ホームページWeChat アプレットミニプログラム開発小規模プログラムの自動テストのための wx API インターセプト

WeChat ミニ プログラム開発チュートリアル列ミニ プログラムの自動テストのための Wx API インターセプト。

小規模プログラムの自動テストのための wx API インターセプト

小さなプログラムがますます広く使用されるようになるにつれて、フロントエンド開発作業も純粋な Web 開発から変化してきました。 Web アプレットのクロスエンド開発に拡張します。研究開発の効率を向上させるために、 より多くの Web モジュールを移行、更新し、小規模なプログラムと互換性を持たせて、端末間での再利用を実現する必要があります。これらのモジュールも、ビジネスに続いて反復とバージョン更新が行われる予定ですが、現時点では、各エンド モジュールの信頼性を確保するために適切な テスト を行う必要があります。

多くの既存の Web モジュールをミニ プログラムに移行したため、Web 側のテストは比較的完了しました。したがって、考慮する必要があるのは次のとおりです。

  1. 既存の Web ユースケースを小規模なプログラムに迅速に移行する方法

  2. 新しいモジュールの場合、両端のユースケースをすばやく作成する方法

(Web 側では主に Puppeteer と Jest の組み合わせを使用します。)

最終ソリューションに直接移動できます

テスト モジュールtype

現在のモジュールは主に以下の 3 種類です。

    環境非依存型論理層モジュール
  1. 環境関連論理層モジュール
  2. 環境に関連付けられた UI コンポーネント モジュール
タイプ 1 モジュールは環境による制限を受けず、追加のテスト ケース開発を必要とせずに単体テストを Web と共有できます。

タイプ 3 モジュールは、ミニ プログラムと Web の間に大きな違いがあるため、再利用するのが困難です (現在、Web UI レイヤーは主に React に基づいており、ミニ プログラムはネイティブに開発され、開発には kbone が使用されています)一部のページ。同型展開)。

ここでは主に

タイプ 2 のモジュールのテスト ケースを移行します。

ミニ プログラム テスト ツールの選択

ミニ プログラム公式は現在、ミニ プログラム テストをサポートする 2 つのツールを提供しています。

    コンポーネント単体テストは、テスト ツールを提供します。 nodejs シングルスレッドで実行されるカスタムコンポーネントをサポートします。
  1. ミニ プログラム オートメーションは、外部スクリプトを通じてミニ プログラムを制御するための一連のソリューションを開発者に提供します。
公式ツールと Jest や Mocha などのテスト フレームワークを組み合わせることで、小規模なプログラム環境でテストを実装できます。

私たちは

ミニ プログラム オートメーション を選択しました。 Puppeteer で Web 側のテストを実行するのと同様に、ミニ プログラムを自動化し、開発者ツールを制御してミニ プログラム環境でテストを実装できます。 2 つの類似点により、クロスエンドの移行やテスト ケースの再利用の可能性が得られます。

テスト ケースの移行方法

レポート モジュールのテスト ケースの移行を例に挙げます。以下は、すでに存在する Web レポート モジュールのテスト ケースです。

Web テスト ケース

このユース ケースでカバーされるパスは次のとおりです:

imlog.default.error() メソッドを呼び出す -> ブラウザがリクエストを開始します -> 正解リクエストパラメータ を確認してください。

test('.error()调用正常', async done => {  const opts = {    project: 'imlogtest',
  };  // 检查上报请求的参数
  const expector = req => {    try {      const url = req.url();      const method = req.method();      const headers = req.headers();      const body = req.postData();      const data = JSON.parse(body);

      expect(url).toBe(DEFAULT_URL); // 请求的url符合预期
      expect(method).toBe('POST'); // 请求的method符合预期
      expect(headers['content-type']).toBe('text/plain'); // 请求的contentType符合预期
      expect(data.url).toBe(TEST_PAGE_URL); // 请求体的url字段符合预期

      done();
    } catch(error) {
      done(error);
    }
  };  // 监听上报请求并校验参数
  page.once('request', expector);  // 在浏览器中执行上报
  page.evaluate(    (o) => {      const reportor = window.imlog.default;
      reportor.config(o);
      reportor.error('test'); // 进行上报
    },
    opts
  );
});复制代码
上記は主に Puppeteer の Page API を使用しています。

    page.evaluate は、ロジックの一部を実行するページを制御します (imlog.default.error() を実行します)
  • page.once('request', Expector) ページをリッスンしますリクエストとパラメーターの取得 (リクエストが開始されたかどうかを検出し、リクエスト パラメーターを確認します)
ミニ プログラムの使用例の想像

ミニ プログラムの自動化では、puppeteer に似たいくつかの API が提供されます。

    miniProgram.evaluate は、コード スニペットを AppService に挿入するミニ プログラムを制御し、実行結果を返します
ミニ プログラムが Puppeteer のようにできる場合は、呼び出しをインターセプトできます。リスニングイベント、テストケースの形式での wx API のパラメータの記述がはるかに簡単になります。私たちが想像するミニ プログラムの使用例は、次の形式になります。

test('.error()调用正常', async done => {  const opts = {    project: 'imlogtest',
  };  // 检查上报请求的参数
  const expector = req => {    try {      // diff:按照特定格式解析出小程序请求参数
      const {url, method, headers, body, data} = parseWxReqParams(req); 

      expect(url).toBe(DEFAULT_URL); // 请求的url符合预期
      expect(method).toBe('POST'); // 请求的method符合预期
      expect(headers['content-type']).toBe('text/plain'); // 请求的contentType符合预期
      expect(data.url).toBe(TEST_PAGE_URL); // 请求体的url字段符合预期

      done();
    } catch(error) {
      done(error);
    }
  };  // 监听上报请求并校验参数
  // todo: miniProgram对象支持once/on等事件方法
  miniProgram.once('request', expector);  // 在小程序中执行上报
  miniProgram.evaluate(    (o) => {      // diff: 请求方法挂在小程序app对象上
      const reportor = getApp().imlog.default;
      reportor.config(o);
      reportor.error('test'); // 进行上报
    },
    opts
  );
});复制代码

miniProgram.on('api', fn) の形式で呼び出しを監視する方法が見つかった限り。 events API 中に渡されるパラメータ。

この形式では、Web とミニ プログラムの使用例の唯一の違いは次のとおりです。

    Web 内のページ オブジェクトの操作はミニ プログラムに転送されます。完成させるミニプログラム オブジェクト
  1. Web のウィンドウの下にマウントする方法と、アプレットのアプリの下にマウントする方法
  2. Web とアプレットのリクエスト パラメーターの解析方法は異なります
wx API インターセプト メソッド

まず、miniProgram オブジェクトを観察します。miniprogram-aumater によって公開される MiniProgram.d.ts を通じて、MiniProgram クラス自体が EventEmitter から継承していることがわかります。

import { EventEmitter } from 'events';export default class MiniProgram extends EventEmitter {  // ...}复制代码
次に、API が呼び出されたときに miniProgram オブジェクトの Emit メソッドをトリガーする方法を見つける必要があります。

これを実現するのに役立つ自動化 API が 2 つあります。

  • miniProgram.mockWxMethod を使用すると、wx オブジェクトで指定されたメソッドを呼び出した結果をオーバーライドできます。

  • miniProgram.exposeFunction は、ミニ プログラムがテスト スクリプト内のメソッドを呼び出すために、AppService でメソッドをグローバルに公開します。

この瞬間、大胆なアイデアが頭に浮かびました。

以上が小規模プログラムの自動テストのための wx API インターセプトの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はjuejinで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、