Let's use Test Driven Development (TDD) to help us design a function that meets the following conditions:
'Rutabagas! That doesn't work.'
Rather than complete the code and then test it, TDD flips the process:
Open this repl.it and note the expected files:
index.jsholds the Jasmine script. DO NOT CHANGE THIS FILE.
launchCodeRocks.jsholds the function we want to design, which we will call
launchCodeRocks.spec.jsholds the testing script.
index.js the files are mostly empty. Only a framework has been
provided for you.
launchCodeRocks.spec.js, complete the
describe function by adding a
test for condition #1:
When passed a number that is ONLY divisible by 2,
Run the test. It should fail because there is no code inside
launchCodeRocks.js, use an
if statement inside the
function to check if the parameter is evenly divisible by 2, and then return an
output. (Hint: modulus).
Run the test script again to see if your code passes. If not, modify
launchOutput until it does.
launchCodeRocks.spec.js, add tests for the conditions:
Run the tests (you have three now). The two new ones should fail, but the first
should still pass. Modify the
it statements as needed if you see a
Add more code inside
launchOutput to check if the parameter is evenly
divisible by 2, 3, or 5, and then return an output based on the result.
Run the test script again to see if your code passes all three tests. If not,
launchOutput until it does.
launchCodeRocks.spec.js, add a test for the condition:
Run the tests. Only the new one should fail.
launchOutput until the function passes all four of the tests.
Continue adding ONE test at a time for the remaining conditions. After you add EACH new test, run the script to make sure it FAILS, while the previous tests still pass.
launchOutput until the function passes the new test and all of the
Presto! By starting with the testing script, you constructed
one segment at a time. The result is complete, valid code that has already
been checked for accuracy.
Now that your function passes all 8 tests, let's change one of the conditions.
For the case where a number is divisible by both 2 and 5, instead of returning
'Launch Rocks!', we want the function to return
Modify the testing and function code to deal with this new condition.
launchOutput and the
describe functions. Notice that there is
quite a bit of repetition in the code.
Try adding arrays, objects and/or loops to refactor the code into a more efficient structure.
A teammate tried to help you out by writing the
launchOutput code before
class. Unfortunately, the code contains some errors.
flawed code here, and cut
and paste your testing script into the
Run the tests and see how many fail. Use the descriptive feedback from your
it statements to find and fix the errors in
Note: You could just cheat and compare your correct code to the flawed sample, but the point of this mission is to give you more practice interpreting and using test results. To gain the most benefit, honor the spirit of this task.