エラー
_id と 1 つ 以上の更新対象のフィールドを指定して、/api/issues/{projectname} へ PUT リクエストを送信することができます。 成功した場合は、updated_on フィールドを更新し、{ result: ‘successfully updated’, ‘_id’: _id } を返す必要があります。
状況
上記エラーのみ発生し、他のFCCテストは全てパスしています.
試したこと
参考
sidemt
2
こちらの投稿を参考に、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) }
品質保証のプロジェクト、順調に取り組まれているようで素晴らしいです! がんばってください!
1 Like
アドバイスに感謝します!
d._id
の部分を修正したところ,すべてのテストにパスすることが出来ました.
こちらの投稿は私もヒットしていたのですが,理解力不足で,自分の問題とは関係ないものと思っていました.
原因
d._id
とreq.query._id
の型の不一致による,_idを用いたGETリクエストの失敗
d._id
はObjectId型,req.query._id
は文字列型でした.
そして,FCCによるPUTリクエストのテストでは,PUTリクエスト後,_idを用いたGETリクエストによって_idを取得し,さらなるテストを行っていました(型チェックやupdated_onの更新チェック).私のローカルでのテストコードではupdate処理を行い,その戻り値のオブジェクトから_idを取得していたため,テストをパスしてしまっており,ここに見落としの原因がありました.
解決策
d._id
をd._id.toString()
に変更する
d._id.toString()
とすることで文字列型同士比較することが可能になり,正しいGETリクエストを実装することが出来ました.
2 Likes