Skip to content

Commit

Permalink
cleanup #402
Browse files Browse the repository at this point in the history
  • Loading branch information
sindresorhus committed Jan 9, 2016
1 parent 4d96a3e commit 37e0dd8
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 16 deletions.
34 changes: 19 additions & 15 deletions docs/recipes/endpoint-testing.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,28 @@
#Endpoint Testing
# Endpoint testing

AVA doesn't have an official assertion library for endpoints, but a great option is [`supertest-as-promised`](https://github.com/WhoopInc/supertest-as-promised).
Since the tests run concurrently, it's a best practice to create a fresh server instance for each test because if we referenced the same instance, it could be mutated between tests. This can be accomplished with a `beforeEach` and `context`, or even more simply with a factory function:
```
AVA doesn't have a builtin method for testing endpoints, but you can use any assertion library with it. Let's use [`supertest-as-promised`](https://github.com/WhoopInc/supertest-as-promised).

Since tests run concurrently, it's best to create a fresh server instance for each test, because if we referenced the same instance, it could be mutated between tests. This can be accomplished with a `test.beforeEach` and `t.context`, or with simply a factory function:

```js
function makeApp() {
const app = express();
app.post('/signup', signupHandler);
return app;
const app = express();
app.post('/signup', signupHandler);
return app;
}
```

Next, just inject your server instance into supertest. The only gotcha is to use a promise or async/await syntax instead of supertest's `end` method:
```

```js
test('signup:Success', async t => {
t.plan(2);
const app = makeApp();
const res = await request(app)
.post('/signup')
.send({email: 'ava@rocks.com', password: '123123'})
t.is(res.status, 200);
t.is(res.body.email, 'ava@rocks.com');
t.plan(2);

const res = await request(makeApp())
.post('/signup')
.send({email: 'ava@rocks.com', password: '123123'});

t.is(res.status, 200);
t.is(res.body.email, 'ava@rocks.com');
});
```
3 changes: 2 additions & 1 deletion readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -700,9 +700,10 @@ AVA, not Ava or ava. Pronounced [`/ˈeɪvə/` ay-və](media/pronunciation.m4a?ra

Concurrency is not parallelism. It enables parallelism. [Learn more.](http://stackoverflow.com/q/1050222)


## Recipes

- [Endpoint testing](/docs/recipes/endpoint-testing.md)
- [Endpoint testing](docs/recipes/endpoint-testing.md)


## Support
Expand Down

0 comments on commit 37e0dd8

Please sign in to comment.