Tell us what’s happening:
I am able to pass all tests except number 5
“I can retrieve a full exercise log of any user by getting /api/exercise/log with a parameter of userId(_id). App will return the user object with added array log and count (total exercise count).”
I am running out of ideas. Please take a look. I am probably missing something simple.
Your code so far
The glitch code is here:
EDIT: I looked up the tests for this exercise. They are here. I tried matching the expected output exactly but it still didn’t pass.
I pass this kind of json as the response:
This is the text of the test failure. It’s not timing out (a problem some people had).
// running tests
I can retrieve a full exercise log of any user by getting /api/exercise/log with a parameter of userId(_id). App will return the user object with added array log and count (total exercise count).
// tests completed
I was so focussed on passing test 5 that I couldn’t see the real problem. In a perfect world the tests would only test one thing at a time but in this case test 5 bundles the exercise log and unexpected user input (for another route, not the log route). This is what fooled me. I spent ages guessing what the log output should look like when it was fine.
The real problem was the test setting up the user and exercises ready to be tested. After a user is created the test code hits the exercise/add route to create a log but one of those requests failed because the date parameter is undefined. You need to handle that or the log will not be what the test expects (the exercise doesn’t get created).
This is a little unfair since this can only fail because your form is not being used. The test actually builds a bad request because it can. Also, test 4 (for adding exercises) will pass leaving you with a false sense of security. I think the tests need fixing. I’ll have a go at that once I feel confident.
EDIT: I submitted a pull request for this issue:
If you still don’t understand my explanation, get in touch.
I’m stuck on the same test 5, my log output looks fine, could you explain in detail about what the test is expecting when creating the exercise with date parameter undefined? I thought if date parameter was not provided we have to get and put the current date to that exercise and so I did. Thanks.
I got this log in Glitch after running the tests, I think it is something related to “date” field:
{ Error: User validation failed: exercises.0.date: Cast to date failed for value "Invalid Date" at path "date"
at MongooseError (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/error/mongooseError.js:7:1)
at ValidationError (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/error/validation.js:26:5)
at model.Document.invalidate (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/document.js:2579:32)
at EmbeddedDocument.invalidate (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/types/embedded.js:291:29)
at EmbeddedDocument.$set (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/document.js:1251:12)
at EmbeddedDocument._handleIndex (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/document.js:980:14)
at EmbeddedDocument.$set (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/document.js:921:22)
at EmbeddedDocument.Document (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/document.js:140:12)
at EmbeddedDocument [as constructor] (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/types/embedded.js:42:12)
at new EmbeddedDocument (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/schema/documentarray.js:115:17)
at CoreDocumentArray._cast (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/types/documentarray.js:109:12)
at CoreDocumentArray._mapCast (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/types/core_array.js:272:17)
at Object.map (native)
at CoreDocumentArray.push (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/types/core_array.js:670:21)
at CoreDocumentArray.push (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/types/documentarray.js:210:28)
Jump Toat /app/server.js:108:22
errors:
{ 'exercises.0.date':
{ CastError: Cast to date failed for value "Invalid Date" at path "date"
at MongooseError (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/error/mongooseError.js:7:1)
at CastError (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/error/cast.js:27:7)
at SchemaDate.cast (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/schema/date.js:341:11)
at SchemaDate.SchemaType.applySetters (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/schematype.js:1070:12)
at EmbeddedDocument.$set (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/document.js:1211:20)
at EmbeddedDocument._handleIndex (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/document.js:980:14)
at EmbeddedDocument.$set (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/document.js:921:22)
at EmbeddedDocument.Document (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/document.js:140:12)
at EmbeddedDocument [as constructor] (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/types/embedded.js:42:12)
at new EmbeddedDocument (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/schema/documentarray.js:115:17)
at CoreDocumentArray._cast (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/types/documentarray.js:109:12)
at CoreDocumentArray._mapCast (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/types/core_array.js:272:17)
at Object.map (native)
at CoreDocumentArray.push (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/types/core_array.js:670:21)
at CoreDocumentArray.push (/rbd/pnpm-volume/3ce2fe38-1c44-475c-9a6a-e323a5782590/node_modules/.registry.npmjs.org/mongoose/5.9.26/node_modules/mongoose/lib/types/documentarray.js:210:28)
Jump Toat /app/server.js:108:22
stringValue: '"Invalid Date"',
messageFormat: undefined,
kind: 'date',
value: 'Invalid Date',
path: 'date',
reason: [Object] } },
_message: 'User validation failed' }
Looks like you are getting a validation error from Mongoose. So your Schema/ model are not getting what they expect. Before you try to create a date from a string and pass it along you should check whether the string converts to a date or not. You’ll also need to handle the case when an empty string is passed from the form. Unfortunately, as I mention in my post above, you will also have to check if the request body even has that parameter. The FCC test tries to add an exercise without passing it at all.
Cast to date failed for value “Invalid Date” at path “date”
“Invalid Date” is what gets returned when you try to create a Date object with invalid input.
Thanks for your answer! I have handled that error and apparently finished the whole project, but testing still show test 5 as “not passed”, even test 6 is OK now. I think is something related to the validation performed but I’m tracking now all operations of validation using console.log() and I think everything is OK on my project.
The part that I still don’t understand is that I’m not passing test 5 which is “I can retrieve a full exercise log of any user by getting /api/exercise/log with a parameter of userId(_id). App will return the user object with added array log and count (total exercise count).” But on debugging I’m realizing that this test apprently is not requested at any moment, I just can see 3 requests but with some optional parameters (from, to, limit) but I never see a request with pure “userId”.
I’ve edited your post for readability. When you enter a code block into a forum post, please precede it with a separate line of three backticks and follow it with a separate line of three backticks to make it easier to read.
I also removed unimportant details (the timestamps).
You can also use the “preformatted text” tool in the editor ( </> ) to add backticks around text.
Thanks, I ran into this same wall as well. Was debugging all day yesterday and it was unhandled ‘undefined’ from the date parameter that was causing the issue.
Hello! I think I didn’t receive your request on glitch . can you send again? I checked the tests running and now I am seeing that the problem is due to the undefined date in that test. I was just answering with a JSON saying that an undefined date was entered but I think the test is expecting to create the exercise anyways. How did you manage the undefined date?
If you go to the example project and check the instructions in README.md, it says:
I can add an exercise to any user by posting form data userId(_id), description, duration, and optionally date to /api/exercise/add. If no date supplied it will use current date.
So, check if the date parameter is undefined, if so, create a new date and pass that instead.
This is solution to exercise Tracker, I forked @OsakaStarbux’s code and then did a code refactor. Using Modern ES6 Syntax. It is all Ok and Passes all the Tests.
In case you are stuck somewhere, don’t hesitate to look through