RESTful なクエリ文字列ベースの API のモックを提供する hapi プラグイン
注意: このプロジェクトのサポートは終了しました
この計画はウォルマートによって所有および維持されていました。このプロジェクトは終了し、ウォルマートはこのプロジェクトをサポートしなくなりました。
このプロジェクトの問題の監視やプル リクエストのレビューは今後行われません。ライセンス条項に基づいてこのプロジェクトを継続して使用することも、自己責任でこのプロジェクトのフォークを使用することもできます。このプロジェクトは、ウォルマートのバグ報奨金プログラムやその他のセキュリティ監視の対象ではなくなりました。
次のアクションを実行することをお勧めします。
セキュリティ上の理由から、Walmart は Github またはその他のプラットフォーム上のプライマリ リポジトリの所有権を他の個人/組織に譲渡しません。さらに、パブリック パッケージ管理システムのパッケージの所有権は譲渡しません。
このパッケージをフォークして開発を続行したい場合は、プロジェクトに新しい名前を選択し、独自のパッケージやビルド自動化などを作成する必要があります。
このプロジェクトのライセンス条項を確認してください。この条項は廃止後も引き続き有効です。##curved-carousel
オプションの曲率を使用して、無限にスクロール可能なカルーセルを作成する簡単な方法。
次のオプションを構成に使用できます。
apiPrefix
モックされるルートのベースを表す文字列または文字列の配列
デフォルトは/api
mocksDir
モックファイルを含むディレクトリ。
デフォルトは__dirname + './mocks'
です。 __dirname はこのプラグインです
mocksAdminPath
このプラグインの管理ページを見つけることができる相対 URL。
デフォルトは/admin/mocks
mocksAdminServerLabels
hapi のプラグイン登録時に使用されるラベルの配列
デフォルトは['admin']
enabled
モックが有効かどうか。
デフォルトはfalse
enableForceCookiePage
Cookie Setter ページを登録するかどうかを表すブール値。このページには、 always_ridicule
Cookie をオンまたはオフにする簡単なボタンがあり、これにより、サーバー設定に関係なく、クライアントが強制的に模擬応答をオプトインできるようになります。初心者のテスターや、ブックマークレットの作成が面倒なデバイスに役立ちます。デフォルトはfalse
forceCookiePath
Cookie セッター ページを見つけることができる相対 URL。
デフォルトは/cookie
forceCookieValue
always_ridicule
クッキーの値を表す文字列。特定の必要な Cookie を公に知らなくても、サーバーが公に利用可能なオプトイン モック メソッドを持つことができます。 expires
値は、設定されてから 30 分です。
デフォルトは"true"
mocksDir
内で、 module.exports
内の配列 hapi Routes を公開するridicule.js
ファイルを作成します。
module . exports = [ {
method : 'GET' ,
path : '/hello' ,
handler : function ( request , reply ) {
reply ( 'hello world' ) ;
}
} , {
method : 'POST' ,
path : '/goodbye' ,
handler : function ( request , reply ) {
reply ( 'thanks for all the fish' ) ;
}
} ]
サーバーの起動時に、構成されたすべてのルートがランダムな 40 文字のプレフィックスを付けて登録されます。 (例: ルート/foo
/(uuid)/foo
で模擬されます)
モック サーバーが有効になると、すべての受信リクエストが設定されたapiPrefix
と照合されます。一致するものが見つかると、リクエストは内部的に疑似ルート ハンドラーに転送されます。
ハンドラーでリクエストをモックアウトするときに救済する機能があります (hapi はパスのみに一致するため、クエリ文字列ベースのシステムのサブセットのみをモックアウトする場合に便利です)。ファイル内でridiculeを単にrequire
、 ridicule.bailout(req, res)
を呼び出します。ここで、 req
とres
ハンドラー内のリクエストとレスポンスのオブジェクトです。
リクエストをモックアウトする最も一般的な方法は、ルート ハンドラーのreply()
インターフェイス内で JSON ファイルのデータを返すだけです。
var data = require ( './mockFile.json' ) ;
var route = {
method : '*' ,
path : '/mockPath' ,
config : {
handler : function ( request , reply ) {
return reply ( data ) ;
}
}
} ;
ただし、カスタム ヘッダーや HTTP ステータス コードなどの追加のメタデータを応答に追加することができます。既存の json ファイルを別のオブジェクト内にラップし、元のファイルをpayload
に設定し、 ridiculeSettings
フィールドを追加するだけです。
それでこのリクエストは
{
"foo" : " bar "
}
になる
{
"ridiculeSettings" : {
"statusCode" : 418 ,
"headers" : { "Content-Type" : " x-stream " }
}
payload: {
"foo" : " bar "
}
}
これはhapiのリクエストフローの最後に追加されるため、結果として、 payload
モックファイルにインライン化する必要があり、そのためサポートされるのは文字列とJSONオブジェクトのみに制限され、ストリームやバッファはサポートされないことに注意してください。
モックを有効/無効にするには 3 つの方法があります。
ハピ構成設定
セットアップでenabled
オプションをtrue
に変更できます。これにより、開始時に有効になりますが、将来的には変更される可能性があります。
管理ページボタンの切り替え
モックのオンとオフは、 mocksAdminPath
で構成されたパスにアクセスすることでいつでも行うことができます。デフォルトでは、これは/admin/mocks
です。これは、hapi ラベルの背後に登録されることに注意してください (セットアップで構成可能ですが、デフォルトでは['admin']
)。これにより、本番サイトに嘲笑を送り、公的にアクセスできないポートにトグル スイッチを存在させることができます。
クライアント上のクッキー
Cookie always_ridicule
がクライアント上で構成されたforceCookieValue
(デフォルト値は文字列 "true"、例: always_ridicule="true"
) の値で設定されている場合、構成されたモックは常に (もちろん削除されるまで) 提供されます。 )。さらに、 always_ridicule=false
指定すると、サーバーの現在の設定に関係なく、クライアントがモックアウトされなくなります。
hapi はパス上のルートのみに一致するため (クエリ文字列パラメーターには一致しません)、パスに対して複数のクエリを一致できる必要があります。そのために、ridicule はridicule.validate
メソッドを提供します。
ridicule.validate
は、リクエストと応答のペアを受け取り、次にvalidator
オブジェクトで構成される検証オブジェクトとcallback
関数を受け取る関数です。
validator
オブジェクトはプレーン オブジェクトで、各キーはクエリ文字列のキーを表し、値は文字列、RegExp、またはクエリ文字列内の対応する値の値と一致する関数のいずれかです。
たとえば、次のクエリ文字列は
?category=Music&genre=ska&year=2012
次の検証と一致します
...
handler : function ( request , reply ) {
ridicule . validate ( request , reply , {
validator : {
category : 'Music' ,
genre : function ( value ) {
return value === 'ska' || value === 'rocksteady'
} ,
year : / ^d{4}$ /
} ,
callback : function ( request , reply ) {
reply ( { 'all' : 'good' } ) ;
}
} )
}
. . .
もちろん、複数のチェックを簡単に連鎖させることもできます
var queriesToCheck = [ {
validator : {
category : 'Music' ,
genre : 'ska' ,
year : / ^d{4}$ /
} ,
callback : function ( request , reply ) {
reply ( ) . file ( './authMock.json' ) ;
}
} , {
validator : {
foo : 'bar' ,
baz : 'biz'
} ,
callback : function ( request , reply ) {
reply ( { 'wordsAre' : 'hard' } ) ;
}
} ] ;
queriesToCheck . some ( function ( route ) {
return ridicule . validate ( request , reply , route ) ;
} ) ;
エンドポイントでリクエストのすべてではなく、リクエストのサブセットをモックアウトしたいという問題が発生する場合があります。この場合、ridicule は便利なヘルパー関数、 ridicule.bailout
を提供します。
必要なのは、これをクエリ チェックの最後に追加し、ハンドラーのrequest
とreply
インターフェイスを通過することだけです。
var matched = queriesToCheck . some ( function ( route ) {
return ridicule . validate ( request , reply , route ) ;
} ) ;
if ( ! matched ) {
ridicule . bailout ( request , reply ) ;
}
これに代わる方法は、最終クエリの validator オブジェクトをtrue
に設定することです。これは、指定されたクエリと自動的に一致し、キャッチオールとして機能します。
var queriesToCheck = [ {
validator : {
category : 'Music' ,
genre : 'ska' ,
year : / ^d{4}$ /
} ,
callback : function ( request , reply ) {
reply ( ) . file ( './authMock.json' ) ;
}
} , {
validator : true ,
callback : function ( request , reply ) {
reply ( ) . file ( './catchall.json' ) ;
}
} ] ;
queriesToCheck . some ( function ( route ) {
return ridicule . validate ( request , reply , route ) ;
} ) ;