Skip to content

Instantly share code, notes, and snippets.

@karlhorky
Last active July 15, 2016 05:47
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save karlhorky/6e68101d8167be27e027 to your computer and use it in GitHub Desktop.
Save karlhorky/6e68101d8167be27e027 to your computer and use it in GitHub Desktop.
Concurrent Test Failures with AVA and angular-mocks

Concurrent test failures with AVA & angular-mocks

Demo for angular/angular.js#13971

Setup

$ npm install --global ava
$ npm install angular angular-mocks ava jsdom
$ ava <filename> --verbose
// Failing case
// Concurrent test runs
import test from 'ava';
import jsdom from 'jsdom';
// Angular dependencies
global.document = jsdom.jsdom('<!doctype html><html ng-app="app"><head><meta charset="utf-8"></head><body></body></html>');
global.window = document.defaultView;
global.Node = global.window.Node;
require('angular/angular');
// Make angular available for angular-mocks
global.angular = global.window.angular;
// Set some window properties required by angular-mocks
global.window.mocha = {};
global.window.beforeEach = test.beforeEach;
global.window.afterEach = test.afterEach;
require('angular-mocks');
angular.module('app', []);
test('a', t => t.true(true));
test('b', t => t.true(true));
// Working case
// Bad workaround - disabling concurrency by running with test.serial() instead of test()
import test from 'ava';
import jsdom from 'jsdom';
// Angular dependencies
global.document = jsdom.jsdom('<!doctype html><html ng-app="app"><head><meta charset="utf-8"></head><body></body></html>');
global.window = document.defaultView;
global.Node = global.window.Node;
require('angular/angular');
// Make angular available for angular-mocks
global.angular = global.window.angular;
// Set some window properties required by angular-mocks
global.window.mocha = {};
global.window.beforeEach = test.beforeEach;
global.window.afterEach = test.afterEach;
require('angular-mocks');
angular.module('app', []);
test.serial('a', t => t.true(true));
test.serial('b', t => t.true(true));
// Working case
// Not so bad workaround - running the (window.afterEach || window.teardown) callback after all tests
import test from 'ava';
import jsdom from 'jsdom';
// Angular dependencies
global.document = jsdom.jsdom('<!doctype html><html ng-app="app"><head><meta charset="utf-8"></head><body></body></html>');
global.window = document.defaultView;
global.Node = global.window.Node;
require('angular/angular');
// Make angular available for angular-mocks
global.angular = global.window.angular;
// Set some window properties required by angular-mocks
global.window.mocha = {};
global.window.beforeEach = test.beforeEach;
global.window.afterEach = test.after;
require('angular-mocks');
angular.module('app', []);
test('a', t => t.true(true));
test('b', t => t.true(true));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment