Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 27 additions & 12 deletions src/matchers/toReject.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,31 @@
export async function toReject(actual) {
const { matcherHint } = this.utils;
const { matcherHint, printReceived } = this.utils;

const pass = await actual.then(
() => false,
() => true,
);
const expectedToResolveButGotRejectedMessage = (value, { isNot } = { isNot: false }) =>
matcherHint('toReject', 'received', '', { isNot, promise: true }) +
'\n\n' +
'Expected promise to resolve, however it rejected with: "' +
printReceived(value) +
'".\n';

const expectedToRejectButGotResolvedMessage = (value, { isNot } = { isNot: false }) =>
matcherHint('toReject', 'received', '', { isNot, promise: true }) +
'\n\n' +
'Expected promise to reject, however it resolved with: "' +
printReceived(value) +
'".\n';

return {
pass,
message: () =>
pass
? matcherHint('.not.toReject', 'received', '') + '\n\nExpected promise to resolve, however it rejected.\n'
: matcherHint('.toReject', 'received', '') + '\n\nExpected promise to reject, however it resolved.\n',
};
return actual.then(
value => ({
pass: false,
message: () => expectedToRejectButGotResolvedMessage(value, { isNot: this.isNot }),
}),
value => ({
pass: true,
message: () =>
this.isNot
? expectedToResolveButGotRejectedMessage(value, { isNot: this.isNot })
: expectedToRejectButGotResolvedMessage(value, { isNot: this.isNot }),
}),
);
}
39 changes: 27 additions & 12 deletions src/matchers/toResolve.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,31 @@
export async function toResolve(actual) {
const { matcherHint } = this.utils;
const { matcherHint, printReceived } = this.utils;

const pass = await actual.then(
() => true,
() => false,
);
const expectedToResolveButGotRejectedMessage = (value, { isNot } = { isNot: false }) =>
matcherHint('toResolve', 'received', '', { isNot, promise: true }) +
'\n\n' +
'Expected promise to resolve, however it rejected with: "' +
printReceived(value) +
'".\n';

const expectedToRejectButGotResolvedMessage = (value, { isNot } = { isNot: false }) =>
matcherHint('toResolve', 'received', '', { isNot, promise: true }) +
'\n\n' +
'Expected promise to reject, however it resolved with: "' +
printReceived(value) +
'".\n';

return {
pass,
message: () =>
pass
? matcherHint('.not.toResolve', 'received', '') + '\n\nExpected promise to reject, however it resolved.\n'
: matcherHint('.toResolve', 'received', '') + '\n\nExpected promise to resolve, however it rejected.\n',
};
return actual.then(
value => ({
pass: true,
message: () =>
this.isNot
? expectedToRejectButGotResolvedMessage(value, { isNot: this.isNot })
: expectedToResolveButGotRejectedMessage(value, { isNot: this.isNot }),
}),
value => ({
pass: false,
message: () => expectedToResolveButGotRejectedMessage(value, { isNot: this.isNot }),
}),
);
}
8 changes: 4 additions & 4 deletions test/matchers/__snapshots__/toReject.test.js.snap
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`.not.toReject fails when passed a promise that rejects 1`] = `
"<dim>expect(</intensity><red>received</color><dim>).not.toReject()</intensity>
"<dim>expect(</intensity><red>received</color><dim>).</intensity>true<dim>.</intensity>not<dim>.</intensity>toReject<dim>()</intensity>

Expected promise to resolve, however it rejected.
Expected promise to resolve, however it rejected with: "<red>{"abc": "something went wrong"}</color>".
"
`;

exports[`.toReject fails when passed a promise that resolved 1`] = `
"<dim>expect(</intensity><red>received</color><dim>).toReject()</intensity>
"<dim>expect(</intensity><red>received</color><dim>).</intensity>true<dim>.</intensity>toReject<dim>()</intensity>

Expected promise to reject, however it resolved.
Expected promise to reject, however it resolved with: "<red>123</color>".
"
`;
8 changes: 4 additions & 4 deletions test/matchers/__snapshots__/toResolve.test.js.snap
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`.not.toResolve fails when passed a promise that resolved 1`] = `
"<dim>expect(</intensity><red>received</color><dim>).not.toResolve()</intensity>
"<dim>expect(</intensity><red>received</color><dim>).</intensity>true<dim>.</intensity>not<dim>.</intensity>toResolve<dim>()</intensity>

Expected promise to reject, however it resolved.
Expected promise to reject, however it resolved with: "<red>{"result": 123}</color>".
"
`;

exports[`.toResolve fails when passed a promise that rejects 1`] = `
"<dim>expect(</intensity><red>received</color><dim>).toResolve()</intensity>
"<dim>expect(</intensity><red>received</color><dim>).</intensity>true<dim>.</intensity>toResolve<dim>()</intensity>

Expected promise to resolve, however it rejected.
Expected promise to resolve, however it rejected with: "<red>[Error: something went wrong]</color>".
"
`;
4 changes: 2 additions & 2 deletions test/matchers/toReject.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ describe('.toReject', () => {
});

test('fails when passed a promise that resolved', async () => {
const promise = Promise.resolve();
const promise = Promise.resolve(123);
await expect(expect(promise).toReject()).rejects.toThrowErrorMatchingSnapshot();
});
});

describe('.not.toReject', () => {
test('fails when passed a promise that rejects', async () => {
const promise = Promise.reject();
const promise = Promise.reject({ abc: 'something went wrong' });
await expect(expect(promise).not.toReject()).rejects.toThrowErrorMatchingSnapshot();
});

Expand Down
4 changes: 2 additions & 2 deletions test/matchers/toResolve.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ describe('.toResolve', () => {
});

test('fails when passed a promise that rejects', async () => {
const promise = Promise.reject();
const promise = Promise.reject(new Error('something went wrong'));
await expect(expect(promise).toResolve()).rejects.toThrowErrorMatchingSnapshot();
});
});

describe('.not.toResolve', () => {
test('fails when passed a promise that resolved', async () => {
const promise = Promise.resolve();
const promise = Promise.resolve({ result: 123 });
await expect(expect(promise).not.toResolve()).rejects.toThrowErrorMatchingSnapshot();
});

Expand Down
7 changes: 3 additions & 4 deletions website/docs/getting-started/setup.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ sidebar_position: 2
Create a setup script with the following:

```javascript title="testSetup.js"

// add all jest-extended matchers
import * as matchers from 'jest-extended';
expect.extend(matchers);
Expand Down Expand Up @@ -42,8 +41,8 @@ To automatically extend `expect` with all matchers, you can use
`jest-extended` works with `vitest` because their `expect.extend` API is compatible. In your setup script:

```javascript title="testSetup.js"
import {expect} from "vitest";
import * as matchers from "jest-extended";
import { expect } from 'vitest';
import * as matchers from 'jest-extended';
expect.extend(matchers);
```

Expand All @@ -52,7 +51,7 @@ Add this setup script to your `vitest.config.js`:
```javascript title="vitest.config.js"
export default defineConfig({
test: {
setupFiles: ["./testSetup.js"],
setupFiles: ['./testSetup.js'],
},
});
```