I just spent an hour trying to debug my code solution for the following lesson: JavaScript Basic Algorithm Scripting → Confirm the Ending.
I was pretty confident in my code (pasted at the bottom), however all the tests would fail in the sidebar
Furthermore, FreeCodeCamp’s built-in logs were also telling me that my code is being ran, and producing incorrect results for all tests like so:
I only found out the root of the issue when I was refactoring my entire code: as soon as I deleted the last line in my code that was trying to log a variable to the console that wasn’t declared, the test passed.
After ~30 google tabs looking into this and thinking about it I recognized that the FreeCodeCamp editor most likely returned all fail results because during tests it appends the test function calls below the script. It ran into a ReferenceError before being able to call the test functions, therefore I’m guessing it was unable to run it even once, hence the all fail result. However, in my case (and I imagine I’m not the only one) when I submitted my code, I received incomplete and therefore misleading information, that only introduced confusion due to the non-user friendly way it was presented.
I thought the problem was not just the ReferenceError, but also my solution being fundamentally incorrect, as the log and the check/error marks in the nav bar indicated a fail for every passing criteria. This was made worse because the logs were telling me it was “running tests” and “tests completed”, even though that wasn’t the case.
My suggestion would be to reduce ambiguity by communicating to the user that their code wasn’t ran a single time due to an error and that’s why it returned incorrect test results, as opposed to telling the user they failed all tests. While technically true, I believe it would be helpful to use the same warning function as when you try to run a script with an infinite loop:
“Potential infinite loop detected on line 1. Tests may fail if this is not changed.”
This would similarly let the user know their script will (almost?) certainly fail due to this critical error on line X, and they should run the script with that in mind.
I’m not sure if this is the right place to post this as it’s more of a general issue/suggestion as opposed being directly related to the lesson, this is my first forum post so apologies if it isn’t.
Please let me know what you think!
My code, note the last line that was the root of the issue
function confirmEnding(str,target) {
const charsArray = str.split(""); //convert string to array
const charsToCheckArray = []; //empty array that for statement populates
//populate charsToCheckArray var with (str)'s last (target.length) characters
for (let i = - 1; Math.abs(i) <= target.length; i--){
charsToCheckArray.unshift(charsArray.slice(i)[0]);
}
//convert array to string
const charsToCheckString = charsToCheckArray.join("");
//returns solution to challenge (boolean)
if (charsToCheckString == target){
return true;
}
return false;
}
console.log(confirmEnding("Bastian", "n"));
console.log(confirmEnding("Congratulation", "on"));
console.log(confirmEnding("Connor", "n"));
console.log(confirmEnding("Walking on water and developing software from a specification are easy if both are frozen", "specification"));
console.log(confirmEnding("He has to give me a new name", "name"));
console.log(confirmEnding("Open sesame", "same"));
console.log(confirmEnding("Open sesame", "sage"));
console.log(confirmEnding("Open sesame", "game"));
console.log(confirmEnding("If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing", "mountain"));
console.log(confirmEnding("Abstraction", "action"));
console.log(undeclaredVariableForTestingPurposes);