LaunchCode's Marketing Team needs your help! To make the website more maintainable, they thought an object called launchcode
that contains important facts and functions they need would be helpful.
This way if they need to make a change to one of the facts, they just have to change the object in one place as opposed to going through pages of code to make the change in every place.
Here is what they need the launchcode
object to contain:
organization
with a value of "nonprofit"
.executiveDirector
with a value of "Jeff"
.percentageCoolEmployees
with a value of 100
.programsOffered
with a value of ["LC101", "LaunchCode Women+", "CodeCamp"]
.launchOutput()
. This method will return a string.Let's use Test-Driven Development to write this code! Rather than complete the code and then test it, TDD flips the process:
Open this repl and note the files:
index.js
holds the object we want to design.launchcode.spec.js
holds the testing script.The files are mostly empty. Only a framework has been provided for you.
Let's start our work with the properties we need to add to the object.
organization
¶describe
function in launchcode.spec.js
, write a test that will check that the value of organization
is "nonprofit"
. Run your test.launchcode.js
and add the organization
property to launchcode
.executiveDirector
¶executiveDirector
is "Jeff"
. Run your test.executiveDirector
property to launchcode
.percentageCoolEmployees
¶percentageCoolEmployees
. Run your test.percentageCoolEmployees
to launchcode
.programsOffered
¶programsOffered
. You should have four expect
statements within your test. Three of them should check that the array contains the appropriate values and the final one should check that the array is the appropriate size.
Before moving on, take a moment either individually or with a classmate, to reflect on why you would need these four expect
statements. Run your test.programsOffered
property to launchcode
.You now have the properties set up for the launchcode
object. Time to move on to creating the launchOutput()
method.
launchOutput()
¶launchOutput()
needs to meet the following conditions:
'Launch!'
'Code!'
'Rocks!'
'LaunchCode!'
'Code Rocks!'
'Launch Rocks!'
'LaunchCode
Rocks!'
'Rutabagas! That doesn't work.'
To make sure that you meet all of these conditions, you need to take it one test at a time.
In launchcode.spec.js
, complete the describe
function by adding a
test for condition #1:
When passed a number that is ONLY divisible by 2,launchOutput()
returns'Launch!'
Run the test. It should fail because there is no code inside launchOutput()
yet!
In launchCodeRocks.js
, use an if
statement inside the launchOutput()
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.
In launchCodeRocks.spec.js
, add tests for the conditions:
launchOutput()
returns
'Code!'
launchOutput()
returns
'Rocks!'
Run the tests. The two new ones should fail, but the first
should still pass. Modify the it
statements as needed if you see a
different result.
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,
modify launchOutput()
until it does.
In launchCodeRocks.spec.js
, add a test for the condition:
When passed a number that is divisible by 2 AND 3,launchOutput()
returns'LaunchCode!'
(not'Launch!Code!'
).
Run the tests. Only the new one should fail.
Modify 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.
Modify launchOutput()
until the function passes the new test and all of the
old ones.
Presto! By starting with the testing script, you constructed launchOutput()
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 'Launch Rocks!
(CRASH!!!!)'
.
Modify the testing and function code to deal with this new condition.