Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/octokit/fixtures

Fixtures for all the octokittens
https://github.com/octokit/fixtures

github github-api hacktoberfest octokit-js tooling

Last synced: about 1 month ago
JSON representation

Fixtures for all the octokittens

Awesome Lists containing this project

README

        

# fixtures

> Fixtures for all the octokittens

![Test](https://github.com/octokit/fixtures/workflows/Test/badge.svg)

Records requests/responses against the [GitHub REST API](https://developer.github.com/v3/)
and stores them as JSON fixtures.

- [Usage](#usage)
- [fixtures.mock(scenario)](#fixturesmockscenario)
- [fixtures.get(scenario)](#fixturesgetscenario)
- [fixtures.nock](#fixturesnock)
- [How it works](HOW_IT_WORKS.md)
- [Contributing](CONTRIBUTING.md)
- [License](#license)

## Usage

Currently requires node 8+

### fixtures.mock(scenario)

`fixtures.mock(scenario)` will intercept requests using [nock](https://www.npmjs.com/package/nock).
`scenario` is a String in the form `/`. `host name`
is any folder in [`scenarios/`](scenarios/). `scenario name` is any filename in
the host name folders without the `.js` extension.

```js
const https = require("https");
const fixtures = require("@octokit/fixtures");

fixtures.mock("api.github.com/get-repository");
https
.request(
{
method: "GET",
hostname: "api.github.com",
path: "/repos/octokit-fixture-org/hello-world",
headers: {
accept: "application/vnd.github.v3+json",
},
},
(response) => {
console.log("headers:", response.headers);
response.on("data", (data) => console.log(data.toString()));
// logs response from fixture
},
)
.end();
```

For tests, you can check if all mocks have been satisfied for a given scenario

```js
const mock = fixtures.mock("api.github.com/get-repository");
// send requests ...
mock.done(); // will throw an error unless all mocked routes have been called
mock.isDone(); // returns true / false
mock.pending(); // returns array of pending mocks in the format [ ]
```

`mock.explain` can be used to amend an error thrown by nock if a request could
not be matched

```js
const mock = fixtures.mock("api.github.com/get-repository");
const github = new GitHub();
return github.repos
.get({ owner: "octokit-fixture-org", repo: "hello-world" })
.catch(mock.explain);
```

Now instead of logging

```
Error: Nock: No match for request {
"method": "get",
"url": "https://api.github.com/orgs/octokit-fixture-org",
"headers": {
"host": "api.github.com",
"content-length": "0",
"user-agent": "NodeJS HTTP Client",
"accept": "application/vnd.github.v3+json"
}
}
```

The log shows exactly what the difference between the sent request and the next
pending mock is

```diff
Request did not match mock:
{
headers: {
- accept: "application/vnd.github.v3"
+ accept: "application/vnd.github.v3+json"
}
}
```

### fixtures.get(scenario)

`fixtures.get(scenario)` will return the JSON object which is used by [nock](https://www.npmjs.com/package/nock)
to mock the API routes. You can use that method to convert the JSON to another
format, for example.

### fixtures.nock

`fixtures.nock` is the [nock](https://github.com/node-nock/nock) instance used
internally by `@octokit/fixtures` for the http mocking. Use at your own peril :)

## License

[MIT](LICENSE.md)