Tracking Custom Events

Google Analytics Data Structure

To validate tracking of Custom Events, use the following Array in your Jasmine expectations:

['send', 'event', 'Button', 'Click', 'Jumbotron CTA']
  │       │        │         │        └──> 5. Event Label
  │       │        │         └───────────> 4. Event Action
  │       │        └─────────────────────> 3. Event Category
  │       └──────────────────────────────> 2. (Standard Google Analytics parameter)
  └──────────────────────────────────────> 1. (Standard Google Analytics parameter)

Sample Jasmine Spec File

Using direct ga() calls, checking proper tracking of Events could be done in the following manner:

describe('The Google Analytics "click" tracking', function () {
   beforeEach(function () {
      // Load the page to test:
      browser.get('index.html');

      // Register the Google Analytics Event Data Interceptor:
      browser.driver.registerGoogleAnalyticsEventDataInterceptor();
   });
 
   it('should fire an Event when clicking on the Jumbotron CTA', function (done) {
      // Click on the "Jumbotron" CTA:
      element( by.css('#jumbotronCTA') ).click();
 
      // Get the "LastEvent" object back from the browser:
      browser.driver.executeScript(function () {
         return window.GAWebTester.getLastEvent();
      })
      .then(
         // Validate the content of the "LastData" object:
         function successCallback (LastData) {
            expect( LastData ).toEqual( ['send', 'event', 'Button', 'Click', 'Jumbotron CTA'] );
         },
         // If there was an error getting back the "LastData" object from the browser, fail the test:
         function errorCallback (error) {
            fail('Should not have received Error: ' + JSON.stringify(error));
         }
      )
      .then(done);
   });
});