Yet another javascript assignments. There are a lot of interactive javascript resources for beginners, but most of them are online and do not cover the modern programming workflow. There are some excellent training resources on github (https://github.com/rmurphey/js-assessment, https://github.com/mrdavidlaing/javascript-koans, https://github.com/vasanthk/js-bits etc) but they are not exactly simulate the everyday programming process. So the motivation of this project is to show TDD process in the wild to the beginners. Assingment tests are implemented in various ways to feel a difference and gain the experience what manner is good, what is bad and what is ugly.
Another idea is to prepare assignment to cover all standard javascript functions, to drilling and mastering skills. Some tasks are practical, but some tasks are rather synthetic.
And the last idea is to inure trainees to work using unit test and feel uncomfortable when programming without tests.
To start javascript assignments please follow the next steps:
Run npm install from you repository folder to download the required modules. All dependent modules will be located in the node_modules folder.
Open your favorite editor and complete tasks.
Open your terminal and use npm test command to run all tests. You can run single file by passing it as argument npm test ./test/01-strings-tests.js.
The local repo folder has the following structure:
node_modules - app dependences restored by npm install command, you can delete this folder and restore later again.
task - folder with tasks modules, it's your main folder.
test - folder with tests modules to verify the tasks completion.
How to implement assignments using TDD fashion
Now you are ready to implement assignments. Tasks modules are located in the task folder. Each module consists of several tasks for specified topic. Each task is usually a regular function:
/** * Returns the result of concatenation of two strings. * * @param {string} value1 * @param {string} value2 * @return {string} * * @example * 'aa', 'bb' => 'aabb' * 'aa','' => 'aa' * '', 'bb' => 'bb' */functionconcatenateStrings(value1,value2){thrownewError('Not implemented');}
Run unit tests and make sure that everything is OK and there are no failing tests.
Read the task description in the comment above the function. Try to understand the idea. If you got it you are to write unit test first, but unit tests are already prepared :) Skip step with writing unit tests.
Remove the throwing error line from function body
thrownewError('Not implemented');
and run the unit tests again. Find one test failed (red). Now it's time to fix it!
Implement the function by any way and verify your solution by running tests until the failed test become passed (green).
Your solution work, but now time to refactor it. Try to make your code as pretty and simple as possible keeping up the test green.
Once you can't improve your code and tests are passed you can commit your solution.
Push your updates to github server and check if tests passed on travis-ci.
If everything is OK you can try to resolve the next task.
How to debug tasks
To debug tests you can use Node inspector. To install it just run npm install -g node-inspector in your terminal. Then follow next steps:
Add debugger; to the first line of your task.
Run your test file with npm run test-debug ./test/01-strings-tests.js.
In another terminal run node-inspector and copy link from the output.
Open the link in your favorite browser. You should see Chrome Developers Tools like interface where you can debug your tasks.
When you found and fix your issue, close the browser's tab with the debug tools, stop the node-inspector by pressing Ctrl-C, stop the test runner by pressing Ctrl-C, remove the debugger; from your task.
How to debug (beginner's way)
There is an easier way to debug for beginners with free Visual Studio Code:
Modify the launch.json in the IDE, set the properties "program" and "args" (empty "args" value run all tests, to run particular test specify this test file in "args"):
请发表评论