質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

1520閲覧

HTTPリクエストをするメソッドの実装のベストプラクティス

Yhaya

総合スコア439

Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

1クリップ

投稿2020/08/18 14:06

質問したいこと

React.js と Redux を使ってアプリケーションを作っているのですが、Action で store を更新するときに一緒に HTTP リクエストをするような実装になっています。

下のコードはこのような状態になっている例の1つです(変数の詳細などは質問に関係ないので省略させていただきます)。

javascript

1// Redux での Action の定義 2export const deletePaperEntry = (title) => { 3 let papers = store.getState().papersInTable; 4 let papersShown = store.getState().papersShown; 5 let newTable = []; 6 let newShownTable = []; 7 8 // HTTP request の部分 9 let url = AUTH_SERVER_URL + "/delete_paper"; 10 let body = JSON.stringify({ 11 username: SHA256(store.getState().userName), 12 title: title, 13 }); 14 let req = makeRequest(url, "POST", body); 15 fetch(req).then((response) => { 16 if (response.ok) { 17 return response.json(); 18 } 19 }); 20 21 // Redux で管理している state の更新 22 for (let i = 0; i < papers.length; i++) { 23 if (papers[i].title !== title) { 24 newTable.push(papers[i]); 25 } 26 } 27 28 return { 29 type: "DELETE_PAPER", 30 papersInTable: newTable, 31 papersShown: newShownTable, 32 }; 33};

このようなコードで現在なにか不具合が生じているということは無いのですが、Enzyme を使ってテストコードを書くときに、上の deletePaperEntry が実行されたときに store に保存されている state が正しく更新されたかをチェックするテストが書きにくいと感じています。

これを解決するために store の更新と HTTP request を分離する必要があると考えているのですが、どのようにするのがベストプラクティスなのかわからず困っています。そもそも分離することが正しいことなのかも自信が無いです。

個人の趣味で開発をしており一般的に用いられている方法というものがわからないので詳しい方に教えていただきたいです。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

http requestの部分だけ切り出して別の関数に分けるのはどうでしょうか?
テスト時はそのhttp requestの関数をmockすることができます

投稿2020/08/19 08:59

komasan1

総合スコア257

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yhaya

2020/08/19 12:27

deletePaper の引数にrequest関数を入れて、テストのときにmockしたrequest関数を渡すということですか?
komasan1

2020/08/20 11:59

jestを例にしますと、http requestの関数をimportする形にしてテスト時はjest.mockを使います。 ``` import { requestFunc } from "./request" deletePaper () { requestFunc() } ``` https://jestjs.io/docs/ja/mock-functions
Yhaya

2020/08/22 08:42

ありがとうございます。なんとか解決することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問