jasmine/gulp-jasmine-browser

Can't run gulp-jasmine-browser with Headless Chrome.

acatxnamedvirtue opened this issue · 6 comments

Hello,

I am trying to run my jasmine tests with headless chrome using the following gulp task taken from your readme:

gulp.task('jasmine-chrome', function() {
  return gulp.src(['src/**/*.js', 'spec/**/*_spec.js'])
    .pipe(jasmineBrowser.specRunner({console: true}))
    .pipe(jasmineBrowser.headless({driver: 'chrome'}));
});

However, I am getting the following error:

[10:16:01] Starting 'jasmine-chrome'...
[10:16:01] Jasmine server listening on port 8000
events.js:160
      throw er; // Unhandled 'error' event
      ^

Error: spawn node_modules\gulp-jasmine-browser\lib\runners\chrome_runner ENOENT
    at exports._errnoException (util.js:1026:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32)
    at onErrorNT (internal/child_process.js:359:16)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9)

When I navigate to my node_modules folder, the chrome_runner file appears to not have a file extension at all, it also differs from what is on your master branch here, it looks like this:

#!/usr/bin/env node

'use strict';

var _regenerator = require('babel-runtime/regenerator');

var _regenerator2 = _interopRequireDefault(_regenerator);

var _stringify = require('babel-runtime/core-js/json/stringify');

var _stringify2 = _interopRequireDefault(_stringify);

var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');

var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);

var run = function () {
  var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee() {
    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }

    var _args$, port, query, url, browser, HeadlessChrome, _run, _ref2, output;

    return _regenerator2.default.wrap(function _callee$(_context) {
      while (1) {
        switch (_context.prev = _context.next) {
          case 0:
            _args$ = args[2], port = _args$ === undefined ? 8888 : _args$, query = args[3];
            url = 'http://localhost:' + port + '/consoleRunner';

            if (query) url += '/?' + query;
            browser = void 0;
            _context.prev = 4;
            HeadlessChrome = require('simple-headless-chrome');

            browser = new HeadlessChrome({ headless: true });
            _context.next = 9;
            return browser.init();

          case 9:
            _context.next = 11;
            return browser.goTo(url);

          case 11:
            _context.next = 13;
            return browser.onConsole(function (args) {
              console.error((0, _stringify2.default)({ id: ':consoleMessage', message: args.map(function (arg) {
                  return arg.value;
                }).join('') }));
            });

          case 13:
            _run = require('./chrome_evaluate');
            _context.next = 16;
            return browser.evaluateAsync(_run);

          case 16:
            _ref2 = _context.sent;
            output = _ref2.result.value;

            output.forEach(function (line) {
              return console.error(line);
            });

          case 19:
            _context.prev = 19;
            _context.next = 22;
            return browser;

          case 22:
            _context.t0 = _context.sent;

            if (!_context.t0) {
              _context.next = 25;
              break;
            }

            browser.close(true);

          case 25:
            return _context.finish(19);

          case 26:
          case 'end':
            return _context.stop();
        }
      }
    }, _callee, this, [[4,, 19, 26]]);
  }));

  return function run() {
    return _ref.apply(this, arguments);
  };
}();

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

require('babel-polyfill');

run.apply(undefined, process.argv);

Manually changing this file to a .js file throws the same error.

Can you please assist?

Thanks,
Tyler

rdy commented

The runner I’m relying on may have changed the API. I’m planning to switch to puppeteer which is directly released by the chrome team. What version of simple-headless-chrome.

You could try an older version of the simple headless chrome in the meantime. I am planing to overhaul the headless chrome part soon.

rdy commented

Upgrade to 2.0.0 and try with puppeteer

hit on the same issue using "gulp-jasmine-browser": "^3.0.1",, "gulp": "^4.0.0",

 Error: spawn C:\Users\Ed\test module\node_modules\gulp-jasmine-browser\lib\runners\chrome_runner ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:201:19)
    at onErrorNT (internal/child_process.js:379:16)
    at process._tickCallback (internal/process/next_tick.js:114:19)
gulp.src(options.files)
                .pipe(jasmineBrowser.specRunner({
                    console: true
                }))
                .pipe(jasmineBrowser.headless({
                    driver: 'chrome',
                }))

BTW, I'm on windows 10 so it could be a path issue in spawn process?

I think this could be related to the issue nodejs/node#7367 (comment)

Having same issue.