Natty Precise Maverick

    qunit-harness

    1.3.12 • Public • Published

    qunit-harness

    A library for running qunit tests on a local machine and in the SauceLabs environment.

    Build Status

    Install

    $ npm install qunit-harness

    Usage

    var QUnitHarness = require('qunit-harness');
    
    function configQunitServerApp (app) {
        app.post('/my-custom-request', function (req, res) {
            res.end('ok');
        });
    }
    
    function before () {
        // do some stuff when the server is created
    }
    
    function after () {
        // do some stuff when the server is about to be closed
    }
    
    //Local machine testing
    var qunitHarness = new QUnitHarness
        //specify the path to the tests
        .fixtures('/tests/')
        //specify qunit server ports
        .port(2000)             //by default 1335
        .crossDomainPort(2001)  //by default 1336
        //add the index.js script content as <script src='/tested-script.js'> to the head of the test page
        .scripts([{ src: '/tested-script.js', path: '/lib/index.js' }])
        .css([{ src: '/style.css', path: '/lib/style.css' }])
        //extend the qunit server application for test purposes
        .configApp(configQunitServerApp)
        .before(before)
        .after(after)
        .create();
    
    //Testing in the Saucelabs environment
    //Configure browsers here: https://docs.saucelabs.com/reference/platforms-configurator/
    var BROWSERS = [
        {
            platform:    'Windows 10',
            browserName: 'chrome'
        },
        {
            platform:    'Windows 10',
            browserName: 'firefox'
        },
        {
            platform:    'Windows 10',
            browserName: 'internet explorer',
            version:     '11.0'
        }
    ];
    
    var SAUCELABS_SETTINGS = {
        username:  <saucelabs_username>,
        accessKey: <saucelabs_accessKey>,
        build:     'build',
        tags:      ['master'],
        browsers:  BROWSERS,
        name:      'qunit tests',
        timeout:   180  //sec
    };
    
    qunitHarness
        .saucelabs(SAUCELABS_SETTINGS)
        .tests(['/tests/test1-test.js', '/tests/test2-test.js'])
        .run()
        .then(function () {
            console.log('Tests done');
        })
        .catch(function (err) {
            console.log(err);
        });
    
    //Testing in local environment
    //Browser opening mechanism uses the "open" method from "testcafe-browser-tools" library.
    //For more information about "browserInfo" options, see https://github.com/DevExpress/testcafe-browser-tools/blob/master/API.md#open 
    var BROWSERS = [
      { 
          browserName: 'chrome',
          browserInfo: {
              path: '<path_to_chrome_dir>\\chrome.exe',
              cmd: '--new-window'          
          }, 
       },
       {
          browserName: 'firefox',
          browserInfo: {
              path: '<path_to_firefox_dir>\\firefox.exe',
              cmd: '-new-window'
          }
       }
    ];
    
    var CLI_SETTINGS = { 
        browsers: BROWSERS, 
        timeout: 60 //sec
    };
    
    qunitHarness
        .cli(CLI_SETTINGS)
        .tests(['/tests/test1-test.js', '/tests/test2-test.js'])
        .run()
        .then(function () {
            console.log('Tests done');
        })
        .catch(function (err) {
            console.log(err);
        });

    QUnit tests

    Wait for an async action

    window.QUnitGlobals.wait(condition, ms);    // returns Promise
    // condition is a function
    // The test will fail with the timeout error if 'condition' returns 'false' within 'ms' milliseconds (3000 ms by default).

    Example:

    asyncTest('test with wait', function () {
        var resolved = false;
    
        window.setTimeout(function () {
            resolved = true;
        }, 50);
    
        window.QUnitGlobals.wait(function () {
                return resolved;
            })
            .then(function () {
                ok(true);
                start();
            });
    });

    Wait for an iframe action

    window.QUnitGlobals.waitForIframe(iframe, timeout);    // returns Promise
    // iframe is an iframe element to wait for
    // The test will fail with the timeout error if the 'load' event for the iframe is not raised within <timeout> or
    // window.QUnitGlobals.WAIT_FOR_IFRAME_TIMEOUT ms.

    Example:

    window.QUnitGlobals.WAIT_FOR_IFRAME_TIMEOUT = 5000;
    
    asyncTest('test with wait for iframe', function () {
        var iframe = document.createElement('iframe');
    
        iframe.src = window.QUnitGlobals.getResourceUrl('../data/iframe.html');
    
        document.body.appendChild(iframe);
    
        window.QUnitGlobals.waitForIframe(iframe).then(function () {
            ok(true);
            start();
        });
    });

    Get test server hostname

    window.QUnitGlobals.hostname;               //http://localhost:1335/
    window.QUnitGlobals.crossDomainHostname;   //http://localhost:1336/

    Get test resource

    window.QUnitGlobals.getResourceUrl(pathToResourceFile[, urlAlias])

    By default the resource has the http://<hostname>/test-resource?filePath=<resourceFilePath>&base=<currentTestFilePath> url. To customize the url, use the urlAlias argument:

    window.QUnitGlobals.getResourceUrl('../data/script.js', 'my-custom-script/script.js');
    //returns "http://<hostname>/test-resource/my-custom-script/script.js?filePath=..."

    Example:

    <!-- data/iframe.html -->
    <!DOCTYPE html>
    <html>
    <head>
        <title>Iframe page</title>
        <meta charset="utf-8">
    </head>
    <body>
        Some content
    </body>
    </html>
    // tests/test1-test.js
    asyncTest('iframe test', function () {
        var iframeSrc = window.QUnitGlobals.getResourceUrl('../data/iframe.html', 'iframe.html');
        $('<iframe></iframe>').src(iframeSrc).appendTo('body');
        //appends an iframe with the url http://<hostname>/test-resource/iframe.html
        ...
    });

    Run a test with some markup on the page

    Put the testname-test.js and testname.html files to the folder with the -test postfix. Then, the markup from the .html file will be included into the testname-test.js test page.

    Example:

    <!-- tests/markup-test/index.html -->
    <div id="#test-element"></div>
    // tests/markup-test/index-test.js
    test('check element', function () {
        ok($('#test-element').length);  //success
    });

    Keywords

    none

    Install

    npm i qunit-harness

    DownloadsWeekly Downloads

    381

    Version

    1.3.12

    License

    MIT

    Unpacked Size

    504 kB

    Total Files

    29

    Last publish

    Collaborators

    • vasily.strelyaev
    • aleksey_popov
    • dmitry-ostashev
    • miherlosev
    • belym.a.2105
    • kirovboris
    • alexkamaev
    • lavrovartem
    • amoskovkin
    • elena.dikareva