Files
notifications-admin/tests/javascripts/analytics/init.test.js
Tom Byers 9a0d522964 Add JS tests for analytics & cookies JS
Includes:
- tests for the analytics interface ported from
  GOVUK Frontend Toolkit
- tests for the cookie banner that appears on all
  pages except the cookies page
- tests for the cookies page JS
- tests for the hasConsentFor function
- adding a deleteCookie helper to remove
  cookies during tests
- polyfill for insertAdjacentText

The last one is because JSDOM doesn't support
insertAdjacentText but our target browsers
do. This polyfill also includes one for
insertAdjacentHTML.
2020-01-20 10:03:36 +00:00

124 lines
2.5 KiB
JavaScript

const helpers = require('../support/helpers');
beforeAll(() => {
// add the script GA looks for in the document
document.body.appendChild(document.createElement('script'));
require('../../../app/assets/javascripts/govuk/cookie-functions.js');
require('../../../app/assets/javascripts/analytics/analytics.js');
require('../../../app/assets/javascripts/analytics/init.js');
});
afterAll(() => {
require('../support/teardown.js');
});
describe("Analytics init", () => {
beforeAll(() => {
window.ga = jest.fn();
jest.spyOn(window.GOVUK.Analytics, 'load');
// pretend we're on the /privacy page
jest.spyOn(window, 'location', 'get').mockImplementation(() => {
return {
'pathname': '/privacy',
'search': ''
};
});
});
afterEach(() => {
window.GOVUK.Analytics.load.mockClear();
window.ga.mockClear();
});
test("After the init.js script has been loaded, Google Analytics will be disabled", () => {
expect(window['ga-disable-UA-26179049-1']).toBe(true);
});
describe("If initAnalytics has already been called", () => {
beforeAll(() => {
// Fake a tracker instance
window.GOVUK.analytics = {};
});
beforeEach(() => {
window.GOVUK.initAnalytics();
});
afterAll(() => {
delete window.GOVUK.analytics;
});
test("The Google Analytics libraries will not be loaded", () => {
expect(window.GOVUK.Analytics.load).not.toHaveBeenCalled();
});
});
describe("If initAnalytics has not been called", () => {
beforeEach(() => {
window.GOVUK.initAnalytics();
});
afterEach(() => {
// window.GOVUK.initAnalytics sets up a new window.GOVUK.analytics which needs clearing
delete window.GOVUK.analytics;
});
test("Google Analytics will not be disabled", () => {
expect(window['ga-disable-UA-26179049-1']).toBe(false);
});
test("The Google Analytics libraries will have been loaded", () => {
expect(window.GOVUK.Analytics.load).toHaveBeenCalled();
});
test("There will be an interface with the Google Analytics API", () => {
expect(window.GOVUK.analytics).toBeDefined();
});
test("A pageview will be registered", () => {
expect(window.ga.mock.calls.length).toEqual(5);
// The first 4 calls configure the analytics tracker. All subsequent calls send data
expect(window.ga.mock.calls[4]).toEqual(['send', 'pageview', '/privacy']);
});
});
});