js: parameterized jest testing
This commit is contained in:
parent
a1cf1b7a84
commit
7cfad9bc6e
1 changed files with 82 additions and 0 deletions
|
@ -388,3 +388,85 @@ describe("fetchData", () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Parameterization
|
||||||
|
|
||||||
|
The following offers a good opportunity for parameterisation:
|
||||||
|
|
||||||
|
```js
|
||||||
|
it("should return page for deletion from `ipages-live`", async () => {
|
||||||
|
// preview = false, isInternal = false
|
||||||
|
await deletePageFromS3("url", false, false);
|
||||||
|
const deleteObjectCommand = s3ClientMock.calls()[0].args[0];
|
||||||
|
expect(deleteObjectCommand.input).toEqual({
|
||||||
|
Bucket: "bbc-ise-ipages-live",
|
||||||
|
Key: "url/index.html",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return page for deletion from `preview`", async () => {
|
||||||
|
// preview = true, isInternal = false
|
||||||
|
await deletePageFromS3("url", true, false);
|
||||||
|
const deleteObjectCommand = s3ClientMock.calls()[0].args[0];
|
||||||
|
expect(deleteObjectCommand.input).toEqual({
|
||||||
|
Bucket: "staff.bbc.com-preview",
|
||||||
|
Key: "preview/url/index.html",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
Each time we are passing in three parameters to the `deletePageFromS3` function which is the object under test. Each time there are different variations in the object that is output.
|
||||||
|
|
||||||
|
To parameterize the process rather than use repeated `it` blocks we can combine the input paramters and outputs into an array:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const testParams = [
|
||||||
|
{
|
||||||
|
preview: false,
|
||||||
|
isInternal: false,
|
||||||
|
bucket: "ipages-live",
|
||||||
|
key: "url/index.html",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
preview: true,
|
||||||
|
isInternal: false,
|
||||||
|
bucket: "staff.com-preview",
|
||||||
|
key: "preview/url/index.html",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
Then use `it.each` to loop through all possible parameter combinations:
|
||||||
|
|
||||||
|
```js
|
||||||
|
it.each(testParams)(
|
||||||
|
"should return page for deletion from %s",
|
||||||
|
async ({ preview, isInternal, bucket, key }) => {
|
||||||
|
await deletePageFromS3("url", preview, isInternal);
|
||||||
|
const deleteObjectCommand = s3ClientMock.calls()[0].args[0];
|
||||||
|
expect(deleteObjectCommand.input).toEqual({
|
||||||
|
Bucket: bucket,
|
||||||
|
Key: key,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
This uses the `%s` variable to print the parameters from each test, which outputs:
|
||||||
|
|
||||||
|
```
|
||||||
|
✓ should return page for deletion from {
|
||||||
|
preview: false,
|
||||||
|
isInternal: false,
|
||||||
|
bucket: 'ipages-live',
|
||||||
|
key: 'url/index.html'
|
||||||
|
} (1 ms)
|
||||||
|
✓ should return page for deletion from {
|
||||||
|
preview: true,
|
||||||
|
isInternal: false,
|
||||||
|
bucket: 'staff.com-preview',
|
||||||
|
key: 'preview/url/index.html'
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
Loading…
Add table
Reference in a new issue