GithubHelp home page GithubHelp logo

holgerjeromin / jasmine-browser-runner Goto Github PK

View Code? Open in Web Editor NEW

This project forked from jasmine/jasmine-browser-runner

0.0 0.0 0.0 300 KB

Serve and run your Jasmine specs in a browser

Shell 0.81% JavaScript 98.39% EJS 0.80%

jasmine-browser-runner's Introduction

jasmine-browser-runner runs your Jasmine specs in a browser. It's suitable for interactive use with normal browsers as well as running specs in CI builds using either headless Chrome or Saucelabs.

Getting started

npm install --save-dev jasmine-browser-runner jasmine-core
npx jasmine-browser-runner init

or

yarn add -D jasmine-browser-runner jasmine-core
npx jasmine-browser-runner init

If you intend to use ES modules, add --esm to the jasmine-browser-runner init command.

Then, customize spec/support/jasmine-browser.json to suit your needs. You can change the spec files, helpers, and source files that are loaded, specify the Jasmine env's configuration, and more.

You can also use the --config option to specify a different file. This file can be a JSON file or a javascript file that exports a object that looks like the JSON above.

To start the server so that you can run the specs interactively (particularly useful for debugging):

npx jasmine-browser-runner serve

To run the specs in a browser (defaults to Firefox):

npx jasmine-browser-runner runSpecs

To use a browser other than Firefox, add a browser field to jasmine-browser.json:

{
  // ...
  "browser": "chrome"
}

Its value can be "firefox", "headlessFirefox", "safari", "MicrosoftEdge", "chrome", or "headlessChrome".

ES module support

If a source, spec, or helper file's name ends in .mjs, it will be loaded as an ES module rather than a regular script. Note that ES modules can only be loaded from other ES modules. So if your source files are ES modules, your spec files need to be ES modules too. Want to use a different extension than .esm? Just set the esmFilenameExtension config property, e.g. "esmFilenameExtension": ".js".

To allow spec files to import source files via relative paths, set the specDir config field to something that's high enough up to include both spec and source files, and set srcFiles to []. You can autogenerate such a configuration by running npx jasmine-browser-runner init --esm.

If you have specs or helper files that use top-level await, set the enableTopLevelAwait config property is set to true.

Import maps are also supported:

{
   // ...
   "importMap": {
     "moduleRootDir": "node_modules", 
     "imports": {
       "some-lib":"some-lib/dist/index.mjs",
       "some-lib/": "some-lib/dist/",
       "some-cdn-lib": "https://example.com/some-cdn-lib"
      }
   }
}

Use with Rails

You can use jasmine-browser-runner to test your Rails application's JavaScript, whether you use the Asset Pipeline or Webpacker.

Webpacker

  1. Run yarn add --dev jasmine-browser-runner.
  2. Run npx jasmine-browser-runner init.
  3. Edit spec/support/jasmine-browser.json as follows:
{
  "srcDir": ".",
  "srcFiles": [],
  "specDir": "public/packs/js",
  "specFiles": [
    "specs-*.js"
  ],
  "helpers": [],
  // ...
}
  1. Create app/javascript/packs/specs.js (or app/javascript/packs/specs.jsx if you use JSX) as follows:
(function() {
  'use strict';

  function requireAll(context) {
    context.keys().forEach(context);
  }

  requireAll(require.context('spec/javascript/helpers/', true, /\.js/));
  requireAll(require.context('spec/javascript/', true, /[sS]pec\.js/));
})();
  1. Add 'spec/javascript' to the additional_paths array in config/webpacker.yml.
  2. Put your spec files in spec/javascript.

To run the specs:

  1. Run bin/webpack --watch.
  2. Run npx jasmine-browser-runner.
  3. visit http://localhost:8888.

Asset Pipeline

  1. Run yarn init if there isn't already package.json file in the root of the Rails application.
  2. Run yarn add --dev jasmine-browser-runner.
  3. Run npx jasmine-browser-runner init.
  4. Edit spec/support/jasmine-browser.json as follows:
{
  "srcDir": "public/assets",
  "srcFiles": [
    "application-*.js"
  ],
  "specDir": "spec/javascript",
  "specFiles": [
    "**/*[sS]pec.?(m)js"
  ],
  "helpers": [
    "helpers/**/*.?(m)js"
  ],
  // ...
}
  1. Put your spec files in spec/javascript.

To run the specs:

  1. Either run bundle exec rake assets:precompile or start the Rails application in an environment that's configured to precompile assets.
  2. Run npx jasmine-browser-runner.
  3. Visit http://localhost:8888.

Remote Grid support (Saucelabs, BrowserStack, etc.)

jasmine-browser-runner can run your Jasmine specs on a remote grid provider like Saucelabs, BrowserStack or your own Selenium Grid. To use a remote grid hub, set the browser object in your config file as follows:

// jasmine-browser.json
{
  // ...
  // BrowserStack
  "browser": {
    "name": "safari",
    "useRemoteSeleniumGrid": true,
    "remoteSeleniumGrid": {
      "url": "https://hub-cloud.browserstack.com/wd/hub",
      "bstack:options": {
        "browserVersion": "16",
        "os": "OS X",
        "osVersion": "Monterey",
        "local": "true",
        "localIdentifier": "tunnel ID",
        "debug": "true",
        "userName": "your BrowserStack username",
        "accessKey": "your BrowserStack access key"
      }
    }
  }
}
// jasmine-browser.json
{
  // ...
  // Saucelabs
  "browser": {
    "name": "safari",
    "useRemoteSeleniumGrid": true,
    "remoteSeleniumGrid": {
      "url": "https://ondemand.saucelabs.com/wd/hub",
      "platformName": "macOS 12",
      "sauce:options": {
        "tunnel-identifier": "tunnel ID",
        "userName": "your Saucelabs username",
        "accessKey": "your Saucelabs access key"
      }
    }
  }
}

When using a remote grid provider, all properties of the browser object are optional except for name which will be passed as the browserName capability, and useRemoteSeleniumGrid which must be set to a value of true. if a remoteSeleniumGrid object is included, any values it contains, with the exception of the url will be used as capabilties sent to the grid hub url. if no value is specified for the url then a default of http://localhost:4445/wd/hub is used.

Saucelabs support (legacy)

NOTE: the below configuration format only supports using Saucelabs in the US. if connecting from the EU, please use the above specifying a url value specific to your region (e.g. https://ondemand.eu-central-1.saucelabs.com:443/wd/hub) to avoid a connection error of WebDriverError: This user is unauthorized to the region. Please try another region, or contact customer support.

WARNING: the below configuration format may be removed in favour of using the above in the future so it is advised that you migrate to the above

jasmine-browser-runner can run your Jasmine specs on Saucelabs. To use Saucelabs, set browser.name, browser.useSauce, and browser.sauce in your config file as follows:

{
  // ...
  "browser": {
    "name": "safari",
    "useSauce": true,
    "sauce": {
      "browserVersion": "13",
      "os": "OS X 10.15",
      "tags": ["your tag", "your other tag"],
      "tunnelIdentifier": "tunnel ID",
      "username": "your Saucelabs username",
      "accessKey": "your Saucelabs access key"
    }
  }
}

All properties of browser.sauce are optional except for username and accessKey. It's best to omit browser.sauce.os unless you need to run on a specific operating system. Setting browser.sauce.tunnelIdentifier is strongly recommended unless you're sure that your account will never have more than one active tunnel.

Want more control?

const path = require('path');
const jasmineBrowser = require('jasmine-browser-runner');

const config = require(path.resolve('spec/support/jasmine-browser.json'));
config.projectBaseDir = path.resolve('some/path');

jasmineBrowser.startServer(config, { port: 4321 });

Supported environments

jasmine-browser-runner tests itself across popular browsers (Safari, Chrome, Firefox, and Microsoft Edge) as well as Node.

Environment Supported versions
Node 18, 20
Safari 15-16
Chrome Evergreen
Firefox Evergreen, 102
Edge Evergreen

For evergreen browsers, each version of jasmine-browser-runner is tested against the version of the browser that is available to us at the time of release. Other browsers, as well as older & newer versions of some supported browsers, are likely to work. However, jasmine-browser-runner isn't tested against them and they aren't actively supported.

To find out what environments work with a particular Jasmine release, see the release notes.

Copyright (c) 2019 Pivotal Labs Copyright (c) 2020-2023 The Jasmine developers This software is licensed under the MIT License.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.