Skip to content

Note

このドキュメントは2026-02-27 03:35PLaMo Translation Modelを使用して自動翻訳されました。

FEP-c551: ECMAScriptモジュールを用いたFediverse拡張提案(FEPs)の適合性テスト作成方法

概要

本提案は、ECMAScriptモジュール形式でFEPsに対するテストケースを作成することで、fediverse環境の機能強化を図るものです。

目次

背景

FEP-d9ad では、Fediverse拡張提案(FEPs)に対する適合性テストの作成が提唱されており、すべての適合性テストで共通して使用可能なコンポーネントとその仕様書への記載方法が規定されています。ただし、いかなるプログラミング言語を用いてFEP-d9ad準拠の適合性テストを実装すべきかについては具体的に定められていません。

本FEP-c551では、人間が読み取れる形式のFEP-d9ad適合性テストを補完するため、テストモジュールからエクスポートされるテストオブジェクトとして実装されたテストケースを提案します。各テストオブジェクトは、テスト入力値を受け取り、テスト結果を含むPromiseを返すrun関数を備えています。

概要

テスターがFEPsに対する新たなテストを作成する際には、対象となるシステムが当該FEPに準拠しているかどうかを判定する方法を記述した人間が読み取れる形式のテスト仕様書を作成します。

ECMAScript開発者は、ECMAScriptを用いてテストロジックを実行するテスト関数と、テスト名・必要な入力値・想定される結果などの追加情報をまとめたテストオブジェクトを実装することで、これらのテスト仕様を自動化可能なコードとして実装できます。これらのテストオブジェクトは、.js.mjsファイルなどとしてウェブ上で公開されます。

テスターは各テスト入力値に対してテスト関数を1回呼び出し、返されたPromiseが解決されるのを待ち、最終的にテスト結果を取得します。この結果には、テスト実行時の「結果」が記述されています。

テスト仕様書

テスト仕様書とは、テストの動作要件を記載した人間が読み取れる文書です。

テスト仕様書には可能な限り、FEP-d9ad で規定されている適合性テストコンポーネントの仕様を含める必要があります。

テスト仕様書の具体例として、fep-521a-test-case.mdが挙げられます。

テストモジュール

FEPsのテスターは、本提案で推奨する形式に従って、自身のテスト仕様を実装したECMAScriptモジュールを公開することができます。このようなモジュールは一般に「テストモジュール」と呼ばれます。

テストモジュールにはインポート宣言を含めないことが推奨されます。これにより、テストモジュールの移植性を確保できます。

テストモジュールでは、デフォルトエクスポートとしてTest Objectを指定することが可能です。

テストモジュールは、さまざまなECMAScriptランタイム環境(node.jsやFirefoxなどのウェブブラウザなど)で正しくパースおよび評価可能である必要があります。

テストモジュールの具体例として、activitypub-testing-fep-521aに実装例があります。

テストモジュールの具体例

export default {
  name: '無効なスクリプトモジュール名',
  run: (input) => ({ outcome: 'passed' }),
  type: ['https://w3id.org/fep/c551#Test'],
  '@context': ["https://www.w3.org/ns/activitystreams"],
}

テストオブジェクト

テストオブジェクトとは、FEP-d9ad準拠の適合性テストなどで定義された、名前付きかつ実行可能なテストを表現するECMAScriptオブジェクトです。

テストオブジェクトには、typeというプロパティが必須であり、この値は文字列 https://w3id.org/fep/c551#Test またはその値を含む配列でなければなりません。

また、nameというプロパティも必須で、これには文字列値が設定されます。

さらに、@contextというプロパティを持つことが推奨されており、その値は https://www.w3.org/ns/activitystreams を含む配列である必要があります。

テストオブジェクトの具体例は、activitypub-testing-fep-521aでエクスポートされています。

テストオブジェクトには、テスト関数を指定するrunプロパティを持つことが推奨されます。

テスト関数

テストオブジェクトのrunメソッドは、テスト結果を解決するPromiseを返す必要があります。

また、さまざまなECMAScriptランタイム環境(node.jsやFirefoxなどのウェブブラウザなど)で正常に実行可能であることが求められます。

テスト入力値

テスト入力値とは、テストのrun関数に対する最初のパラメータです。

テスト入力値はオブジェクト形式でなければなりません。複数の異なる論理的な入力を持つテストの場合、各入力に名前を付与し、最上位レベルの入力オブジェクト内にそれぞれの名前をプロパティとして定義する必要があります。

テスト入力値は、呼び出し元のテストが規定するInput仕様に準拠している必要があります。

テスト結果

テスト結果には、outcomeというプロパティが必須であり、この値は文字列でなければなりません。

また、infoというプロパティを持つことが推奨されており、その値も文字列となります。

さらに、pointerというプロパティを任意で設定することが可能です。このプロパティは、outcomeの背景情報を文脈化するためのもので、例えばoutcomeが「失敗」となった場合、その要因となる具体的な数値などをオブジェクト形式で指定します。例えば、ある数値が低すぎるためにテスト結果が「失敗」となった場合には、infoに「数値が低すぎます」を、pointer{ number: 100 } を設定するといった使い方が可能です。

適合性要件は、RFC2119に準拠した「MUST」を含む文章によって示されます。

著作権

CC0 1.0 Universal(パブリックドメイン献呈)

本Fediverse拡張提案の著者は、法律で認められる範囲内において、当該著作物に関するすべての著作権および関連する権利を放棄しています。