karma-runner / karma-ie-launcher

A Karma plugin. Launcher for Internet Explorer.
MIT License
59 stars 23 forks source link

Multiple connections execute tests multiple times #30

Closed tjbeatrice closed 9 years ago

tjbeatrice commented 9 years ago

Very new to unit testing with JavaScript.

I have some basic tests which I am running via karma-runner.

When using Chrome as a test browser... no issue. However when executing tests for IE (8) my tests are getting executed multiple times. After logging at DEBUG level I get the following output:

INFO [IE 8.0.0 (Windows 7)]: Connected on socket srYcBFnPtDJ4EwGY7uI2 with id 36846622 DEBUG [launcher]: IE (id 36846622) captured in 14.396 secs DEBUG [IE 8.0.0 (Windows 7)]: New connection srYcBFnPtDJ4EwGY7uI2 (already have srYcBFnPtDJ4EwGY7uI2) DEBUG [IE 8.0.0 (Windows 7)]: New connection srYcBFnPtDJ4EwGY7uI2 (already have srYcBFnPtDJ4EwGY7uI2, srYcBFnPtDJ4EwGY7uI2) DEBUG [IE 8.0.0 (Windows 7)]: New connection srYcBFnPtDJ4EwGY7uI2 (already have srYcBFnPtDJ4EwGY7uI2, srYcBFnPtDJ4EwGY7uI2, srYcBFnPtDJ4EwGY7uI2) DEBUG [IE 8.0.0 (Windows 7)]: New connection srYcBFnPtDJ4EwGY7uI2 (already have srYcBFnPtDJ4EwGY7uI2, srYcBFnPtDJ4EwGY7uI2, srYcBFnPtDJ4EwGY7uI2, srYcBFnPtDJ4EwGY7uI2) DEBUG [IE 8.0.0 (Windows 7)]: New connection srYcBFnPtDJ4EwGY7uI2 (already have srYcBFnPtDJ4EwGY7uI2, srYcBFnPtDJ4EwGY7uI2, srYcBFnPtDJ4EwGY7uI2, srYcBFnPtDJ4EwGY7uI2, srYcBFnPtDJ4EwGY7uI2) DEBUG [IE 8.0.0 (Windows 7)]: New connection srYcBFnPtDJ4EwGY7uI2 (already have srYcBFnPtDJ4EwGY7uI2, srYcBFnPtDJ4EwGY7uI2, srYcBFnPtDJ4EwGY7uI2, srYcBFnPtDJ4EwGY7uI2, srYcBFnPtDJ4EwGY7uI2, srYcBFnPtDJ4EwGY7uI2)

The number of connections (7) are exactly the number of times my tests are being run (the same tests 7 times over).

IE 8.0.0 (Windows 7) LOG: 'no header DOM test' IE 8.0.0 (Windows 7) LOG: 'no header DOM test' IE 8.0.0 (Windows 7) LOG: 'no header DOM test' IE 8.0.0 (Windows 7) LOG: 'no header DOM test' IE 8.0.0 (Windows 7) LOG: 'no header DOM test' IE 8.0.0 (Windows 7) LOG: 'no header DOM test' IE 8.0.0 (Windows 7) LOG: 'no header DOM test'

Any ideas?

Versions I am using:

tjbeatrice commented 9 years ago

After further reading and debugging, I believe this is an issue related to karma itself... not necessarily the launcher?

In this snippet within the socket keeps re-connecting.

`socketServer.sockets.on('connection', function(socket) { log.debug('A browser has connected on socket ' + socket.id);

var replySocketEvents = events.bufferEvents(socket, EVENTS_TO_REPLY);

socket.on('register', function(info) {
  var newBrowser;
  var isRestart;

  if (info.id) {
    newBrowser = capturedBrowsers.getById(info.id) || singleRunBrowsers.getById(info.id);
  }

  if (newBrowser) {
    isRestart = newBrowser.state === Browser.STATE_DISCONNECTED;
    newBrowser.reconnect(socket);

    // We are restarting a previously disconnected browser.
    if (isRestart && config.singleRun) {
      newBrowser.execute(config.client);
    }
  } else {
    newBrowser = injector.createChild([{
      id: ['value', info.id || null],
      fullName: ['value', info.name],
      socket: ['value', socket]
    }]).instantiate(Browser);

    newBrowser.init();

    // execute in this browser immediately
    if (config.singleRun) {
      newBrowser.execute(config.client);
      singleRunBrowsers.add(newBrowser);
    }
  }

  replySocketEvents();
});

});`

If I comment out this line it works fine. Obviously not a real solution ;)

newBrowser.reconnect(socket);

Not sure why it keeps thinking it is a new browser?

tjbeatrice commented 9 years ago

If anybody else finds this problem, I was able to fix it by adding a configuration option to karma runner:

browserNoActivityTimeout: 2000,

So my Grunt task looks like this:

        karma: {
            unit: {
                configFile: 'config/karma.conf.js',
                // can overwrite any options from the config file
                reporters: ['progress', 'junit'],
                junitReporter: {
                    outputFile: 'build-test-results.xml'
                },
                browsers: ['IE'],
                browserNoActivityTimeout: 2000,
                singleRun: true
            }
        }