const helpers = require('./support/helpers.js'); beforeAll(() => { jest.useFakeTimers(); }); afterAll(() => { require('./support/teardown.js'); }); describe('Prevent duplicate form submissions', () => { let form; let button; let formEventSpy; beforeEach(() => { // set up DOM document.body.innerHTML = `
`; form = document.querySelector('form'); button = document.querySelector('button'); // requires a helper due to JSDOM not implementing the submit method formEventSpy = helpers.spyOnFormSubmitEventPrevention(jest, form); require('../../app/assets/javascripts/preventDuplicateFormSubmissions.js'); }); afterEach(() => { document.body.innerHTML = ''; // we run the previewPane.js script every test // the module cache needs resetting each time for the script to execute jest.resetModules(); formEventSpy.mockClear(); }); test("It should prevent the second click on the 'submit' button", () => { helpers.triggerEvent(button, 'click'); expect(button.disabled).toBe(true); helpers.triggerEvent(button, 'click'); expect(button.disabled).toBe(true); }); test("It should allow clicks again after 1.5 seconds", () => { helpers.triggerEvent(button, 'click'); jest.advanceTimersByTime(10000); helpers.triggerEvent(button, 'click'); expect(formEventSpy.mock.calls.length).toEqual(0); }); });