Skip to content

Commit f60dc56

Browse files
committed
Fix and verify passing defaultProps to deferFn.
1 parent 85026ab commit f60dc56

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

src/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ export const createInstance = (defaultProps = {}, displayName = "Async") => {
9292
if (!deferFn) return
9393
this.args = args
9494
this.start()
95-
return deferFn(...args, this.props, this.abortController).then(
95+
return deferFn(...args, { ...defaultProps, ...this.props }, this.abortController).then(
9696
this.onResolve(this.counter),
9797
this.onReject(this.counter)
9898
)

src/spec.js

+42
Original file line numberDiff line numberDiff line change
@@ -460,4 +460,46 @@ describe("createInstance", () => {
460460
await waitForElement(() => getByText("loading"))
461461
await waitForElement(() => getByText("resolved"))
462462
})
463+
464+
test("custom instance also passes defaultProps to deferFn", async () => {
465+
const deferFn = jest.fn().mockReturnValue(resolveTo())
466+
const CustomAsync = createInstance({ deferFn })
467+
468+
let counter = 1
469+
const { getByText } = render(
470+
<CustomAsync foo="bar">
471+
{({ run }) => <button onClick={() => run("go", counter++)}>run</button>}
472+
</CustomAsync>
473+
)
474+
const expectedProps = { deferFn, foo: "bar" }
475+
expect(deferFn).not.toHaveBeenCalled()
476+
fireEvent.click(getByText("run"))
477+
expect(deferFn).toHaveBeenCalledWith("go", 1, expect.objectContaining(expectedProps), abortCtrl)
478+
fireEvent.click(getByText("run"))
479+
expect(deferFn).toHaveBeenCalledWith("go", 2, expect.objectContaining(expectedProps), abortCtrl)
480+
})
481+
482+
test("custom instance correctly passes props to deferFn on reload", async () => {
483+
const deferFn = jest.fn().mockReturnValue(resolveTo())
484+
const CustomAsync = createInstance({ deferFn })
485+
486+
let counter = 1
487+
const { getByText } = render(
488+
<CustomAsync foo="bar">
489+
{({ run, reload }) =>
490+
counter === 1 ? (
491+
<button onClick={() => run("go", counter++)}>run</button>
492+
) : (
493+
<button onClick={reload}>reload</button>
494+
)
495+
}
496+
</CustomAsync>
497+
)
498+
const expectedProps = { deferFn, foo: "bar" }
499+
expect(deferFn).not.toHaveBeenCalled()
500+
fireEvent.click(getByText("run"))
501+
expect(deferFn).toHaveBeenCalledWith("go", 1, expect.objectContaining(expectedProps), abortCtrl)
502+
fireEvent.click(getByText("reload"))
503+
expect(deferFn).toHaveBeenCalledWith("go", 1, expect.objectContaining(expectedProps), abortCtrl)
504+
})
463505
})

0 commit comments

Comments
 (0)