--- title: Testing description: Easily test your code across platforms. --- # Testing flecks uses Mocha and Chai to run your tests. Let's create a small test application to illustrate how testing works in flecks: ``` npx @flecks/create-app testing ``` Move into your new project directory and create a fleck: ``` npx @flecks/create-fleck unit ``` You will notice a line in the output: ``` No fleck tests found. ``` flecks is trying to run the tests for the fleck, but none exist by default. Let's add some code and then add some tests to verify that it works. Edit `packages/unit/src/index.js` to add some code: ```javascript title="packages/unit/src/index.js" export const add2 = (n) => n + 2; export const add3 = (n) => n + 3; ``` Now create a `packages/unit/test` directory and add a source file `add2.js` inside: ```javascript title="packages/unit/test/add2.js" import {expect} from 'chai'; const {add2} = require('@testing/unit'); it('can add two to a number', () => { // highlight-next-line expect(add2(2)).to.equal(5); }); ``` :::note We intentionally made an error so we can see what a failed test looks like. ::: Now run the following command **from within `packages/unit`**: ```bash npm run test ``` You will see the following output: ``` 1) can add two to a number 0 passing (11ms) 1 failing 1) can add two to a number: AssertionError: expected 4 to equal 5 + expected - actual -4 +5 ``` It caught the error! Let's fix it up: ```javascript title="packages/unit/test/add2.js" import {expect} from 'chai'; const {add2} = require('@testing/unit'); it('can add two to a number', () => { // highlight-next-line expect(add2(2)).to.equal(4); }); ``` and try again: ```bash npm run test ``` ``` ✓ can add two to a number 1 passing (4ms) ``` flecks also allows you to write tests that only target a specific platform. Let's add a webserver and then write a test that only runs for the client: :::warning Make sure you run the following command in your **project directory**, not the `packages/unit` directory. ::: ```bash npx flecks add @flecks/web ``` Now, let's add a test. We add a client test by adding a `platforms/client` directory to our `test` directory and putting tests there: ```javascript title="packages/unit/test/platforms/client/add3.js" import {expect} from 'chai'; const {add3} = require('@testing/unit'); it('can add three to a number', () => { // highlight-next-line expect(add3(2)).to.equal(6); }); ``` :::note We intentionally made a mistake again to show a test failure. ::: Now start your application: ```bash npm start ``` Visit your website in the browser and you will see: ![A screenshot of a browser showing the test runner page with our test failing](./flecks-test-client-failed.png) The test is failing! That's what we expected. Now, edit your client test to fix it: ```javascript title="packages/unit/test/platforms/client/add3.js" import {expect} from 'chai'; const {add3} = require('@testing/unit'); it('can add three to a number', () => { // highlight-next-line expect(add3(2)).to.equal(5); }); ``` Save the file. If you still have your application running, go look at the page. You'll notice that **it updated automatically** to look like: ![A screenshot of a browser showing the test runner page with our test passing](./flecks-test-client-passed.png) Awesome, everything passes! :::info[Sanity check] If you run `npm run test` in your `packages/unit` directory, you will see that only one test was run: ``` ✓ can add two to a number 1 passing (3ms) ``` That's correct; we only run client tests on the client.