Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jamesshore/tdd-intro
Everything you need to conduct an introductory workshop on test-driven development.
https://github.com/jamesshore/tdd-intro
Last synced: about 2 months ago
JSON representation
Everything you need to conduct an introductory workshop on test-driven development.
- Host: GitHub
- URL: https://github.com/jamesshore/tdd-intro
- Owner: jamesshore
- License: other
- Created: 2019-07-19T21:50:27.000Z (about 5 years ago)
- Default Branch: facilitator
- Last Pushed: 2022-12-30T18:17:46.000Z (over 1 year ago)
- Last Synced: 2024-05-22T09:04:54.064Z (4 months ago)
- Language: JavaScript
- Size: 9.92 MB
- Stars: 133
- Watchers: 11
- Forks: 10
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# TDD Intro
This repository and its [associated video series](https://www.letscodejavascript.com/v3/episodes/tdd_intro) has everything you need to conduct an introductory workshop on test-driven development. It uses JavaScript and Node.js.
To conduct this workshop with a group, [read the facilitation guide here](facilitator/readme.md).
To conduct this workshop as a self-study session, start with episode 1 of the video series: [letscodejavascript.com/v3/comments/tdd_intro/1](https://www.letscodejavascript.com/v3/comments/tdd_intro/1). It will walk you through everything you need.
## Prerequisites
You need the following programs to use this repository:
* [Git](https://git-scm.com/)
* [Node.js](https://nodejs.org/en/)## Branches
The following branches are available in this repository:
* facilitator: Facilitator guide and materials (in the `facilitator` directory).
* start_here: The starting point for the example exercise in the video series.
* continue_here: Where the video series ends and the viewer is prompted to continue on there own.
* completed: The finished program.## Running the Program
The program is a simple scoring tool for the [Cribbage card game](http://www.cribbage.org/NewSite/rules/rule1.asp). It's run from the command-line, like this:
```sh
$ ./run.sh JH5D5S5C5H
29
```On Windows, use `run` instead of `./run.sh`.
That command means "score a hand consisting of Jack of Hearts, 5 of Diamonds, 5 of Spades, and 5 of Clubs, with the 5 of Hearts as the starter card." (This happens to be the highest-scoring hand in Cribbage.) Each card is represented by a pair of characters.
1. The first character is the rank of the card, with '0' representing '10': A, 2, 3, 4, 5, 6, 7, 8, 9, 0, J, Q, K.
2. The second character is the suit of the card: H, S, D, C referring to Hearts, Spades, Diamonds, and Clubs respectively.Depending on which branch of the repository you check out, the program be partially implemented as an exercise for you to complete. See [the facilitator branch](https://github.com/jamesshore/tdd-intro) for more details.
Here are all the commands that are available:
* `./run.sh` (`run` on Windows): Run the program.
* `./build.sh` (`build` on Windows): Run the build script, which will automatically lint the code and run its tests.
* `./watch.sh quick` (`watch quick` on Windows): Run the build script on files that have changed, and re-run it every time a file changes. On MacOS, it will also play a sound indicating build success or failure.
* `./clean.sh` (`clean` on Windows): Delete files created by the build.## Writing the Program
For details about writing the program, see the [the facilitator branch](https://github.com/jamesshore/tdd-intro). Here are the main facts:
* The program is written in JavaScript and uses Node.js.
* The test framework is [Mocha](https://mochajs.org/).
* The assertion library is [Chai](https://www.chaijs.com/).
* Source code is in the `src/` folder. Command-line infrastructure, including the entry point to the program, is in `src/cli/`.
* The main module is `src/score.js`. The command-line infrastructure calls `analyze()` in that module. It provides `analyze()` with a string representing the first command-line parameter (or `undefined` if there wasn't one) and then prints whatever `analyze()` returns.
* Tests are run from the `src/` folder. They must start with an underscore and end with `_test`, like this: `src/_score_test.js`.
* Build infrastructure is in the `build/` folder. You can ignore it.## Cribbage Scoring Rules
Cribbage scoring is based on a hand of four cards plus a "starter" card. The score is calculated by finding all combinations of cards that meet the following criteria:
* Pair of cards: 2 points
* Straight of three cards or more: 1 point per card
* Aces are low, so A, 2, 3 is a valid straight, but Q, K, A is not.
* 4-card flush excluding starter card: 4 points
* 5-card flush including starter card: 5 points
* Jack in the hand whose suit matches the starter card's suit: 1 point
* Card values that add up to 15: 2 points
* Aces' values are 1.
* Jacks, Queens, and Kings' values are 10.
* All other cards' values are equal to their numbers.
* Example: King + Ace + 4 = 10 + 1 + 4 = 15.Every unique combination of cards can be used. For example, a hand consisting of 7 of Hearts, 8 of Spades, 8 of Hearts, 8 of Diamonds, with a starter card of 9 of Clubs can be scored as follows:
* 8 of Spades + 8 of Hearts: pair (2 points)
* 8 of Spades + 8 of Diamonds: pair (2 points)
* 8 of Hearts + 8 of Diamonds: pair (2 points)
* 7 of Hearts + 8 of Spades + 9 of Clubs: straight (3 points)
* 7 of Hearts + 8 of Hearts + 9 of Clubs: straight (3 points)
* 7 of Hearts + 8 of Diamonds + 9 of Clubs: straight (3 points)
* 7 of Hearts + 8 of Spades: adds up to 15 (2 points)
* 7 of Hearts + 8 of Hearts: adds up to 15 (2 points)
* 7 of Hearts + 8 of Diamonds: adds up to 15 (2 points)Total score: 21 (A very good hand!)
However, subsets of straights and flushes may only be counted once. In other words, a four-card straight is only worth three points; it doesn't get counted as a three-card straight *and* a four-card straight. Same for flushes. For example, a hand consisting of 2, 3, 4, and 5 of Hearts, with a starter card of 6 of Hearts, would be scored as follows:
* 2, 3, 4, 5, 6 of Hearts: straight (5 points)
* 2, 3, 4, 5, 6 of Hearts: flush (5 points)
* 2, 3, 4, 6 of Hearts: adds up to 15 (2 points)
* 4, 5, 6 of Hearts: adds up to 15 (2 points)Total score: 14 (A good score, but not as amazing as you might expect from a straight flush.)