Structuring our test files
Next, we are going to write our unit tests, but where should we put them? There are generally two approaches:
- Placing all tests for the application in a top-level
test/
directory - Placing the unit tests for a module of code next to the module itself, and using a generic
test
directory only for application-level integration tests (for example, testing integration with external resources such as databases)
The second approach (as shown in the following example) is better as it keeps each module truly separated in the filesystem:
$ tree . ├── src │ └── feature │ ├── index.js │ └── index.unit.test.js └── test ├── db.integration.test.js └── app.integration.test.js
Furthermore, we're going to use the .test.js
extension to indicate that a file contains tests (although using .spec.js
is also a common convention). We will be even more explicit and specify the type of test in the extension itself; that is, using unit.test.js
for unit test, andintegration...