(品質保証コース・課題トラッカー)put リクエストのテストが通らないのはなぜでしょうか?

エラー

_id と 1 つ 以上の更新対象のフィールドを指定して、/api/issues/{projectname} へ PUT リクエストを送信することができます。 成功した場合は、updated_on フィールドを更新し、{ result: ‘successfully updated’, ‘_id’: _id } を返す必要があります。

状況

上記エラーのみ発生し、他のFCCテストは全てパスしています.

試したこと

  • FCCフォーラムでの検索
    解決するためのヒントは見つかりませんでした.

  • 手動でのテスト
    プレビューで投稿処理と更新処理を自分で手動でテストしてみましたが、問題なく操作することが出来ていました.

参考

こちらの投稿を参考に、freeCodeCamp側のテストのコードを見てみたところ、
/api/issues/{project}?_id={課題のID} へGETリクエストを送って、その結果を見て正しく更新されているかチェックしているのですが、どうやらこの ?_id={課題のID} のフィルターが正しく動作していないようです。

実際に {デモのURL}/api/issues/{project}?_id={存在するはずの課題のID} というURLにアクセスして、正しくデータがフィルターできているか確認してみてください。(GETリクエストであれば通常のブラウザにURLを入れるだけで確認できます。)

上手くいっていないようであれば、api.js 20行目で比較している内容を見直してみましょう。

if (req.query._id) 					{ data = data.filter(d => d._id 				=== req.query._id) }

品質保証のプロジェクト、順調に取り組まれているようで素晴らしいです! :clap: がんばってください!

1 Like

アドバイスに感謝します!

d._idの部分を修正したところ,すべてのテストにパスすることが出来ました.

こちらの投稿は私もヒットしていたのですが,理解力不足で,自分の問題とは関係ないものと思っていました.

原因

d._idreq.query._idの型の不一致による,_idを用いたGETリクエストの失敗

d._idはObjectId型,req.query._idは文字列型でした.
そして,FCCによるPUTリクエストのテストでは,PUTリクエスト後,_idを用いたGETリクエストによって_idを取得し,さらなるテストを行っていました(型チェックやupdated_onの更新チェック).私のローカルでのテストコードではupdate処理を行い,その戻り値のオブジェクトから_idを取得していたため,テストをパスしてしまっており,ここに見落としの原因がありました.

解決策

d._idd._id.toString()に変更する

d._id.toString()とすることで文字列型同士比較することが可能になり,正しいGETリクエストを実装することが出来ました.

2 Likes