[解決済み] nock.jsで投稿データを返信させるには?
2022-03-09 21:32:28
質問
この関数が与えられた。
createTrip: function(trip, userId) {
trip.userId = userId
trip.id = uuid()
return axios
.post(`${url}/trips`, trip)
.then(res => res.data)
.catch(error => error)
}
そしてこのテスト。
tripToCreate = {
"name": "Iceland 2017",
"start": "2017-04-07",
"end": "2017-04-29",
"parts": []
}
describe('#createTrip', function() {
it('should post the trips to the REST API', async function() {
nock(baseUrl)
.post('/trips')
.reply(201)
data = await tripDao.createTrip(tripToCreate, 'u1')
console.log(data)
expect(data.id).to.match(/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/)
expect(data.userId).to.equal(tripToCreate.userId)
expect(data.name).to.equal(tripToCreate.name)
expect(data.start).to.equal(tripToCreate.start)
expect(data.end).to.equal(tripToCreate.end)
})
})
投稿されたデータをnockに返信させたい(そのためjson-serverの動作を模倣している)。 フィールドを2つ追加した後、createTrip()関数によってデータが投稿されるので、単純にハードコードされたデータを返すことはできません。 nock(または他のモッキングツール)を使用して可能でしょうか?
ボーナス質問:このテストを作ることは実際に意味があるのでしょうか?それとも、統合テスト専用のjson-serverを使った真の統合テストの方が良いのでしょうか?
よろしくお願いします。
解決方法は?
はい、nockでサポートされています。ドキュメントのこのセクションを参照してください。 https://github.com/nock/nock#specifying-replies
そこで示された例は、まさにあなたが求めていることを実現しています。
const scope = nock('http://www.google.com')
.post('/echo')
.reply(201, (uri, requestBody) => requestBody)
どのようなテストを書けばいいのかについては、どのような動作をテストしようとしているのかを考えることが重要です。nockは(実際のサーバーをセットアップする必要がない)クライアントのテストに最も適していますが ノードモックス-http は、サーバーエンドポイントのテストに適しています (実際のクライアントをセットアップする必要はありません)。
関連
-
[解決済み】webpack: モジュールが見つかりません。Error: 解決できない(相対パスで)
-
[解決済み】Vueのテンプレートまたはレンダー関数が定義されていない 私はどちらも使っていないのですが?
-
[解決済み】ETIMEDOUTエラーの対処方法は?
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み】別のウェブページにリダイレクトするにはどうすればいいですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】パッシブイベントリスナー内部でpreventDefaultができない
-
[解決済み】document.getElementByIDは関数ではありません。
-
[解決済み】Uncaught ReferenceError: angular is not defined - AngularJSが動作しない。
-
[解決済み】Angular JS Uncaught Error。[インジェクター:モジュラー]。
-
[解決済み] 解決済み】clearInterval()が動作しない [重複] [重複]
-
[解決済み】XMLHttpRequestモジュールが定義されていない/見つからない
-
[解決済み】WebpackとBabelで「このファイルタイプを扱うには適切なローダーが必要な場合があります。
-
[解決済み】エラー:リスン EACCES 0.0.0.0:80 OSx Node.js
-
[解決済み】Vueが定義されていない
-
[解決済み】module.exports "モジュールが定義されていません"