Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@doodle/tracking / src / helpers / getTrackingClickHandler.spec.js
Size: Mime:
import { getDataTrackingEl } from './getTrackingClickHandler';

const wrapEl = el => {
  const wrapped = document.createElement('div');

  wrapped.appendChild(el);

  return wrapped;
};

describe('getDataTrackingEl', () => {
  let clickedTarget;
  let trackingEl;

  beforeEach(() => {
    clickedTarget = document.createElement('span');
    trackingEl = document.createElement('button');
    trackingEl.dataset.tracking = {
      event: 'clicked it',
    };
  });

  it('does not find tracking element when there are no tracking-related data attributes in parents', () => {
    const wrapped = wrapEl(wrapEl(wrapEl(wrapEl(clickedTarget))));

    trackingEl.dataset.tracking = '';
    trackingEl.appendChild(wrapped);

    expect(getDataTrackingEl(clickedTarget)).toEqual(null);
  });

  it('finds tracking element when a direct child is the target', () => {
    trackingEl.appendChild(clickedTarget);

    expect(getDataTrackingEl(clickedTarget)).toEqual(trackingEl);
  });

  it('finds tracking element when target is 2 levels deep', () => {
    const wrapped = wrapEl(clickedTarget);

    trackingEl.appendChild(wrapped);

    expect(getDataTrackingEl(clickedTarget)).toEqual(trackingEl);
  });

  it('finds tracking element when target is 5 levels deep', () => {
    const wrapped = wrapEl(wrapEl(wrapEl(wrapEl(clickedTarget))));

    trackingEl.appendChild(wrapped);

    expect(getDataTrackingEl(clickedTarget)).toEqual(trackingEl);
  });

  it('does not throw exception checking SVGs on IE 11', () => {
    // In IE11 an SVG's dataset is undefined
    clickedTarget = {};

    expect(() => getDataTrackingEl(clickedTarget)).not.toThrow(TypeError);
  });
});