diff --git a/src/FieldArray.test.js b/src/FieldArray.test.js index 1c10ba5..dffd87f 100644 --- a/src/FieldArray.test.js +++ b/src/FieldArray.test.js @@ -315,6 +315,59 @@ describe('FieldArray', () => { expect(result).toEqual(['FOO[0]', 'FOO[1]', 'FOO[2]']) }) + it('calculate dirty/pristine using provided isEqual predicate', async () => { + const renderInput = jest.fn(({ input }) => ) + const renderFields = jest.fn(({ fields }) => + fields.map(field => ( + + )) + ) + const isEqual = jest.fn( + (aArray, bArray) => + !aArray.some((a, index) => a.bar !== bArray[index].bar) + ) + TestUtils.renderIntoDocument( +
+ {() => ( + + + {renderFields} + +
+ )} + + ) + expect(renderInput).toHaveBeenCalled() + expect(renderInput).toHaveBeenCalledTimes(2) + expect(renderInput.mock.calls[0][0].input.value).toBe('a') + expect(renderInput.mock.calls[1][0].input.value).toBe('b') + + expect(renderFields).toHaveBeenCalledTimes(1) + expect(renderFields.mock.calls[0][0].meta.dirty).toBe(false) + + // change value + renderInput.mock.calls[1][0].input.onChange('c') + + expect(renderInput).toHaveBeenCalledTimes(5) + expect(renderInput.mock.calls[4][0].input.value).toBe('c') + expect(renderInput.mock.calls[4][0].meta.dirty).toBe(true) + + await sleep(1) + expect(renderFields).toHaveBeenCalledTimes(3) + expect(renderFields.mock.calls[2][0].meta.dirty).toBe(true) + }) + it('should allow Field components to be rendered', async () => { const renderInput = jest.fn(({ input }) => ) const dom = TestUtils.renderIntoDocument(