🔮 An easy-to-use JavaScript unit testing framework.

Overview

Build Status FOSSA Status Coverage Status Reproducible Builds Chat on Gitter npm

QUnit - A JavaScript Unit Testing Framework.

QUnit is a powerful, easy-to-use, JavaScript unit testing framework. It's used by the jQuery project to test its code and plugins but is capable of testing any generic JavaScript code (and even capable of testing JavaScript code on the server-side).

QUnit is especially useful for regression testing: Whenever a bug is reported, write a test that asserts the existence of that particular bug. Then fix it and commit both. Every time you work on the code again, run the tests. If the bug comes up again - a regression - you'll spot it immediately and know how to fix it, because you know what code you just changed.

Having good unit test coverage makes safe refactoring easy and cheap. You can run the tests after each small refactoring step and always know what change broke something.

QUnit is similar to other unit testing frameworks like JUnit, but makes use of the features JavaScript provides and helps with testing code in the browser, such as built in support for asynchronicity and exception handling.

Support

If you need help using QUnit, chat with us on Gitter.

To report a bug or request a new feature, open an issue.

Contribute

If you are interested in helping develop QUnit, check out our contributing guide.

Comments
  • Async: Make tests Promise-aware

    Async: Make tests Promise-aware

    Fixes #632. Ref #534.

    ~~I'm not loving how un-DRY the Test#run function is... but that's not new, only exacerbated by this PR.~~

    Updated: This makes the setup, teardown, and test methods all aware that their return value may be a Promise in need of asynchronous resolution (resolve-ing).

    Criticism or other suggestions welcomed, as usual.

    cc: @domenic @stefanpenner

    opened by JamesMGreene 42
  • HTML Reporter: New Diff using Google's Diff-Patch-Match Library

    HTML Reporter: New Diff using Google's Diff-Patch-Match Library

    Uses google's Diff Patch Match Library to replace the current diff algorithms.

    Solves: https://github.com/jquery/qunit/issues/348

    Discussed (and screenshots) in https://github.com/jquery/qunit/pull/764

    @leobalter @jzaefferer Please Review

    opened by gauravmittal1995 39
  • Implement async/done callback system

    Implement async/done callback system

    We still want to provide better support for async testing. We have several options for implementing this, though they all come down to getting rid of methods within the test context.

    Some ideas:

    // async() returns done callback
    test(..., function(assert) {
      // async() can be invoked multiple times, each callback has to be invoked
      var done = assert.async();
      setTimeout(function() {
        done();
      });
    });
    // this makes integration of Promises very easy
    test( ..., function( assert ) {
        /* ... */
        APP.foo().always( assert.async() ).done( function () {
            assert.ok(true);
        } );
        APP.bar().always( assert.async() ).done( function () {
            assert.ok(true);
        } );
    });
    
    // all tests are async, always have to explicitly end the test, async or not
    test(..., function(assert) {
      assert.end();
    });
    
    // expect sets up async test, finishes when number of assertions ran
    test(..., function(assert) {
      // makes this test async
      expect(1);
      setTimeout(function() {
        // expected 1 assertion, continue with other tests
        // any other assertions will fail this test
        assert.ok(true);
      });
    
    // return a promise from the test
    [...]
    

    For the last one, see #634

    Frameworks that are good references: mocha, nodeunit. We could force calling done like nodeunit, always or depending on configuration.

    Related: #374

    This replaces #331, to have a fresh start on this discussion.

    Category: API Type: Enhancement Type: Meta 
    opened by jzaefferer 35
  • Split core.js into smaller chunks

    Split core.js into smaller chunks

    This PR tries to close #782.

    I make the pull request now so that anyone can see how I'm approaching the task and can tell me whether I'm doing something wrong. As it is work in progress, it may not pass the tests

    opened by BraulioVM 33
  • [QUnit.only] Add support for source-based test filtering (aka exclusive tests)

    [QUnit.only] Add support for source-based test filtering (aka exclusive tests)

    I think it would be handy to be able to filter tests right in the source code. This feature is essential when Karma is used and the test suite is large.

    Mocha and Jasmine already support this feature via '.only' and 'iit' respectively.

    What do you guys think?

    Category: API Type: Enhancement help welcome 
    opened by ftokarev 32
  • All: Use Rollup and Babel to build

    All: Use Rollup and Babel to build

    Addressing #707. This will enable us to use ES6 via Babel and build our application via Rollup, meaning no more reliance on specified concat order.

    Some interesting things to note:

    • The code in src should mostly be free from QUnit expressions, other than in src/core and src/export which is where the definition and export of the global QUnit object occurs.
    • JSHint now runs on the individual source files and is more strict to ensure that we are explicit about dependencies.
    • Anything in reporter/runner does not depend on any code in src other than src/core which exports QUnit and src/globals which provides access to global objects.
    • There are some files in reporter/runner that have their contents wrapped in an IIFE to allow them to return early. These files should be converted to export functions that execute similar code. This will eventually make it easy to ship QUnit separately from the runner and reporter which are specific to the browser.

    Improvements for future PRs:

    • Remove all IIFEs, these shouldn't be needed anymore

    • Breakup some of the larger modules to simplify dependency graph (e.g., src/test and src/html)

    • Move all source code into src. This might be contentious, but I'd like to see a structure similar to the following:

      qunit/
        src/
          qunit.js
          qunit.css
          core/
            index.js
          reporter/
            index.js
          runner/
            index.js
      

      The qunit.js file will import core/index.js, reporter/index.js, and runner/index.js and those will then be responsible to act as entry points for the functionality encompassed within. index.js could also be something like main.js or exports.js. The idea here is to have just one directory for our source code that can also mirror how we'd like to think about our dependency graph.

    opened by trentmwillis 30
  • Pendings tests

    Pendings tests

    Something that came out of a discussion with Yehuda: During a big refactoring they have hundreds of failing tests. They turned them off using QUnit.skip, but that doesn't tell them which of the skipped tests starting passing again at some point. To quickly test changes in passing tests, they ended up with this:

    QUnit.skip = QUnit.test;
    

    There's probably a better way to deal with that situation. One idea is to have something like a QUnit.pending method, that has the same signature as QUnit.test(), but will reverse the result. So if all assertions pass, the test fails, if at least one fails, the test passes.

    The HTML reporter could use a similar marker as QUnit.skip.

    Thoughts?


    Update 2015-04-15:

    After some discussion, we came up with this:

    // This test will show up with a "todo" badge, with a similar style as the "skipped" badge
    // It will show as passed when at least one assertion fails, or fail when all assertions pass
    QUnit.todo( "this isn't implemented, yet" function( assert ) {
      assert.ok( featureTest(), "waiting for feature" );
    } );
    
    QUnit.testDone( function( details ) {
      console.log( details.name, details.todo );
      //> "this isn't implemented, yet" true
    } );
    
    QUnit.log( function( details ) {
      console.log( details.message, details.todo );
      //> "waiting for feature" true
    } );
    
    Component: HTML Reporter Category: API Type: Enhancement Status: Ready 
    opened by jzaefferer 30
  • Build: Use ESLint instead of JSHint/JSCS

    Build: Use ESLint instead of JSHint/JSCS

    Work in progress: Just fixing minor issues at this point.

    TODOs:

    • [x] Fix indentation issues
    • [x] Use eslint-disable-next-line comments instead of eslint-disable-line comments
    opened by platinumazure 29
  • Add New Skip Feature

    Add New Skip Feature

    Why

    I was missing a feature that would mark tests as "skipped" so that I can see tests that aren't implemented, or features lacking in that browser, or to temporarily skip a test with a reason so I could remember to come back to it.

    How

    The general implementation is to make your final result a 3-state variable instead of 2-state. Right now there is true for passing and false for failing. This adds a thirds state of null for skipped. Calling skip() or skipIf() will mark that test as "skipped" which will color it yellow, and add to the "skipped" counter (note that skipIf() has a test param and will only assert "skipped" if that param is truthy).

    Use cases

    Mocked Test

    The most basic use case that I started with was me mocking out tests, and implementing random ones out of order. I didn't want to have "failing" tests for unimplemented, nor did I want to use expect(0) and have a passing test because I will forget to go back to it. So the most basic case was something like:

    module('Utils');
    
    test('#utilFunction', function() {
        skip();
    });
    

    which gives me output like:

    tests 1

    SkipIf based on Feature Detection

    This was brought up in #189 that it would be nice if we could detect a browser feature, and conditionally skip the assertions depending on if it had it or not. Something like:

    test("that the function will return the element passed by a selector", function() {
        skipIf(!document.querySelectorAll, "Browser doesn't support querySelectorAll. Implement test for alternative interface if we're going to support this browser.", function () {
            var result =document.querySelectorAll('#container a');
            ok(result);
        });
    });
    

    which on FF19 gives the result:

    tests 2

    but in IE7 gives the result:

    tests 3

    Final Notes

    Obviously there a many reasons that skipping a test is preferred to it failing. I may have implemented it in a way that is not ideal, and if so please let me know and I will try to fix it because this is a feature I would really like to see land. The final thing I want to note is that if you have failed assertions in a test with a skip() call as well, the test is still marked as failed:

    tests 4

    If you have tests you know will fail if some condition isn't met, then that is what skipIf() is for. You can do the test and only run code inside if you need to, otherwise you get a skip assertion.

    opened by englercj 29
  • Test: Implement QUnit.failTest().

    Test: Implement QUnit.failTest().

    This allows for error recovery in async conditions.

    I've written the logic and added a basic test. I still need to write tests for a few edge cases (mostly along the lines of "what will happen if pushFailureAndResume() has been called already but other assertions come back after the test runner has moved on?"). I just wanted to put this up to get some initial feedback.

    Open to feedback on the function names I've used.

    opened by platinumazure 28
  • How should global error handlers resume the test runner in 2.0?

    How should global error handlers resume the test runner in 2.0?

    We're using QUnit and RequireJS. We've defined a require.onError handler as follows:

    define([], function () {
        require.onError = function (e) {
            if (QUnit && QUnit.config) {
                if (QUnit.config.current) {
                    var currentTest = QUnit.config.current;
    
                    currentTest.pushFailure("Died on test #" + (currentTest.assertions.length + 1) + " " +
                        currentTest.stack + ": " + (e.message || e));
                }
    
                // Restart the tests if they're blocking
                if (QUnit.config.blocking) {
                    QUnit.start();
                }
            }
        };
    });
    

    This is heavily inspired by how the global error handler used to handle these issues. However, QUnit.start() itself now throws an error (in 2.0.0-rc1), so I need a new way to resume the test runner. What is the best way to do that?

    Component: HTML Reporter Category: API Type: Meta 
    opened by platinumazure 28
  • Fix memory leaks in due to timeout/timeoutHandler

    Fix memory leaks in due to timeout/timeoutHandler

    disclaimer: I'm not sure if Test.finish is the best place to put such logic, however it seemed most logic place for me.

    The problem description: In Ember.js we have ember-qunit package that assigns reference to the currently running application instance to this.owner, where this is the reference to testEnvironment property in Test class.

    During test execution (here https://github.com/qunitjs/qunit/blob/2.19.3/src/test.js#L752), we persist references to the timeoutHandler in the shared config object.

    After the test execution, config.timeoutHandler keeps reference to the last test that was executed (as it's closure created in https://github.com/qunitjs/qunit/blob/2.19.3/src/test.js#L738).

    As a result, after tests execution there is a reference to the application instance persisted in heap, which makes it harder to find memory leaks in the application code.

    I'm not sure if there is a need/way to write test for this, so please advice.

    opened by SergeAstapov 4
  • Test with timeout and missing assert.async() call never times out

    Test with timeout and missing assert.async() call never times out

    related issue: https://github.com/emberjs/ember-qunit/issues/476

    Tell us about your runtime:

    • QUnit version: 2.19.1
    • Which environment are you using? (e.g., browser, Node): browser
    • How are you running QUnit? (e.g., QUnit CLI, Grunt, Karma, manually in browser): browser, jsfiddle

    Code that reproduces the problem:

    QUnit.test( "demo", async assert => {
    	assert.timeout( 10 );
    	const done = assert.async();
    	assert.true( true );
    } );
    

    https://jsfiddle.net/fasjpd49/

    Type: Bug Component: Core Type: Regression 
    opened by patricklx 1
  • Core: QUnit.equiv major ES6 refactor & optimizations [Step 2]

    Core: QUnit.equiv major ES6 refactor & optimizations [Step 2]

    This PR introduces further refactors and optimizations based on https://github.com/qunitjs/qunit/pull/1700

    Certain changes probably require QUnit to update its browser policy and deprecate support for certain browsers.

    I'm confident that each commit should result in faster deepEqual checks, except the last one. The last commit particularly needs to be benchmarked I think.

    I seperated each refactor to its seperate commit. Have a look, I think you'll find it very interesting! :)

    opened by izelnakri 0
  • Remove QUnit.extend()

    Remove QUnit.extend()

    During my code removals I already saw that this method is deprecated and planned to be removed in v3. This PR could serve as the removal commit(s) if it gets merged, otherwise feel free to close the PR ;)

    opened by izelnakri 0
  • Core: Remove inArray with native array.includes()

    Core: Remove inArray with native array.includes()

    While reading the source code I realized this internal function isn't needed anymore if we drop the IE support:

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes#browser_compatibility

    opened by izelnakri 4
  • Support ESM when watch mode reruns files

    Support ESM when watch mode reruns files

    Tell us about your runtime:

    • QUnit version: 2.19.1
    • Which environment are you using? (e.g., browser, Node): Node
    • How are you running QUnit? (e.g., QUnit CLI, Grunt, Karma, manually in browser): Terminal

    What are you trying to do?

    Code that reproduces the problem:

    Running qunit -w. On first run it successfully outputs the results of the tests, upon making a change to the test file, the error occurs:

    Screen Shot 2022-06-08 at 9 05 03 AM

    What did you expect to happen?

    Test should just re-run. Any help would be appreciated!

    Type: Bug Component: CLI 
    opened by adamfuhrer 7
Releases(2.19.3)
  • 2.19.3(Oct 23, 2022)

  • 2.19.2(Oct 17, 2022)

    Changed

    • Core: Faster diffing for config.noglobals by refactoring slow mutations. (@izelnakri) #1697
    • Assert: Improve performance of QUnit.equiv(). (@izelnakri) #1700
    • Assert: Faster deepEqual for Map values by avoiding typeEquiv calls. (@Krinkle)
    • Assert: Faster deepEqual by reducing internal objectType checks. (@Krinkle)
    • Assert: Faster deepEqual by using re-assignment for internal pairs. (@Krinkle)

    Fixed

    • Core: Fix inaccurate count in reporter output after re-run. #1687
    • CLI: Fix MaxListeners warning in long-running watch mode. #1692
    Source code(tar.gz)
    Source code(zip)
  • 2.19.1(May 2, 2022)

  • 2.19.0(Apr 28, 2022)

    Added

    Changed

    • HTML Reporter: Improve accessibility, design, and fuzziness of the module filter. (@Krinkle) #1664, #1685

    Fixed

    • Core: Fix event "runtime" data to be rounded to milliseconds.
    • Core: Fix pretty stacktrace shortening to work on Windows.
    • HTML Reporter: Faster toolbar setup by re-using beginDetails.
    Source code(tar.gz)
    Source code(zip)
  • 2.18.2(Apr 21, 2022)

    Changed

    • HTML Reporter: Improve accessibility and design of the module filter. (Timo Tijhof) #1664
    • HTML Reporter: Improve fuzzy-matching of the module filter. #1685

    Fixed

    • HTML Reporter: Faster rendering of module filter results. (Thanks @mixonic!) #1664, #1685
    • HTML Reporter: Fix retention of state over multiple module searches. (Thanks @jembezmamy!) #1683
    • HTML Reporter: Fix runtime to be rounded in Chromium. #1678
    Source code(tar.gz)
    Source code(zip)
  • 2.18.1(Mar 29, 2022)

  • 2.18.0(Feb 16, 2022)

    Added

    • Assert: New assert.propContains() for partial object comparison. (@izelnakri) #1668
    • Core: Add QUnit.hooks to globally add beforeEach and afterEach. (@Krinkle) #1475
    • CLI: Add support for watching .ts files when TypeScript is used. #1669
    • CLI: Add support for watching .json, .cjs, and .mjs files. #1676

    Fixed

    • CLI: Fix ESM file imports on Windows to use file-protocol URLs. #1667
    • CLI: Improve performance of watch mode by recursively ignoring directories. (@Krinkle) #1676
    Source code(tar.gz)
    Source code(zip)
  • 2.17.2(Sep 20, 2021)

    Changed

    Fixed

    • Core: Correctly ignore late tests after a nested QUnit.module.only() closure. (Steve McClure @smcclure15) #1645
    • Core: Restore fake test for "No tests were run" message. #1652
    • HTML Reporter: Restore URL parameter reading. #1657
    Source code(tar.gz)
    Source code(zip)
  • 2.17.1(Sep 9, 2021)

  • 2.17.0(Sep 5, 2021)

    Added

    • HTML Reporter: Add "Rerun failed tests" link. (Jan Buschtöns @buschtoens) #1626
    • Core: New error event for bailing on uncaught errors. (Timo Tijhof) #1638

    Changed

    • Core: Improve warning for incorrect hook usage to include module name. (Chris Krycho @chriskrycho) #1647

    Deprecated

    • Core: The internal QUnit.onError and QUnit.onUnhandledRejection callbacks are deprecated. #1638

      These were undocumented, but may have been used in a fork or other custom runner for QUnit. Switch to the supported QUnit.onUncaughtException instead.

    Fixed

    • Assert: Improve validation handling of assert.throws() and assert.rejects(). (Steve McClure @smcclure15) #1637
    • Core: Ensure skipped child module hooks don't leak memory. (Ben Demboski @bendemboski) #1650
    • Core: Fix bad module nesting when module closure throws global error. #1478
    • Core: Fix reporting of uncaught errors during QUnit.begin(). (Timo Tijhof) #1446
    • Core: Fix reporting of uncaught errors during or after QUnit.done(). (Timo Tijhof) #1629
    Source code(tar.gz)
    Source code(zip)
  • 2.16.0(Jun 7, 2021)

    Added

    • Core: New QUnit.test.each() method for data providers. (@ventuno) #1568

    • Core: New failOnZeroTests configuration option. (Brenden Palmer @brendenpalmer)

    • Core: New QUnit.reporters interface. (Timo Tijhof) f8948c9 js-reporters#133

      This introduces support for using the tap reporter in a browser. This was previously limited to the CLI.

    Changed

    • Assert: Indicate which test a drooling assert.async() callback came from. (Steve McClure @smcclure15) #1599

    Deprecated

    • Core: Warn when a module callback has a promise as a return value. (Ray Cohen @raycohen) #1600

    Fixed

    • Core: Fix QUnit.module.only() regression in 2.14.0, where some unrelated modules also executed. (Steve McClure) #1610
    • CLI: Improve ESM detection. (Steve McClure) #1593
    • HTML Reporter: Increase contrast and use richer colors overall. (Timo Tijhof) #1587
    Source code(tar.gz)
    Source code(zip)
  • 2.15.0(Apr 12, 2021)

    Changed

    • HTML Reporter: Trim whitespace of the filter input. (Nathaniel Furniss) #1573
    • CLI: Upgrade js-reporters to 2.0.0. #1577

    Deprecated

    • Core: Warn when setting hooks for a different module. (Ray Cohen) #1586

    Fixed

    • Assert: Fix assert.throws() to fail gracefully when expected class does not match. (Steve McClure) #1530
    • CLI: Fix TAP output to support cyclical objects. (Zachary Mulgrew) #1555, js-reporters#104
    • CLI: Fix TAP output for the Infinity value, previously became null. (Timo Tijhof) #1406
    • CLI: Fix TAP output going silent if console object is mocked. (Timo Tijhof) #1340
    Source code(tar.gz)
    Source code(zip)
  • 2.14.1(Apr 1, 2021)

    Changed

    • CLI: Upgrade commander to 7.1.0. (Timo Tijhof) #1564

    Fixed

    • Core: Restore strict mode compatibility. (Edward Faulkner) #1558
    • HTML Reporter: Check for undefined testItem in testDone callback.
    Source code(tar.gz)
    Source code(zip)
  • 2.14.0(Jan 12, 2021)

    Added

    • HTML Reporter: Use a fixed header with scrollable test results. (Bryan Crotaz) #1513
    • Core: Add official support for SpiderMonkey runtime. (Timo Tijhof) #1535

    Changed

    • CLI: Update and re-audit tiny-glob and node-watch dependencies. #1522, #1524

    Fixed

    • HTML Reporter: Set main and navigation ARIA roles. (Steve McClure) #1427
    • Core: Fix QUnit.module.only logic for unscoped modules. (Steve McClure) #1272
    • Assert: Fix assert.timeout() bug causing a non-async test to fail. #1539
    Source code(tar.gz)
    Source code(zip)
  • 2.13.0(Nov 30, 2020)

    Added

    • Core: Log test name as part of "Assertion after test" failures. (brandonocasey) #1517
    • CLI: Add native support for ESM .mjs files on Node 12+. (Timo Tijhof) #1465

    Deprecated

    • HTML Reporter: Deprecate PhantomJS. (Steve McClure)

    Fixed

    • Core: Count tests run so that suiteEnd emits correctly with active filters. (Stephen Yeung) #1416
    • Core: Fix test counter bug when nesting invalid test functions. (Timo Tijhof)
    • HTML Reporter: Avoid leaking Map global in older browsers. (Timo Tijhof)
    Source code(tar.gz)
    Source code(zip)
  • 2.12.0(Nov 9, 2020)

  • 2.11.3(Oct 5, 2020)

  • 2.11.2(Sep 10, 2020)

Owner
QUnit
The powerful, easy-to-use JavaScript testing framework.
QUnit
Simple JavaScript testing framework for browsers and node.js

A JavaScript Testing Framework Jasmine is a Behavior Driven Development testing framework for JavaScript. It does not rely on browsers, DOM, or any Ja

Jasmine 15.5k Jan 2, 2023
blanket.js is a simple code coverage library for javascript. Designed to be easy to install and use, for both browser and nodejs.

Blanket.js A seamless JavaScript code coverage library. FYI: Please note that this repo is not actively maintained If you're looking for a more active

Alex Seville 1.4k Dec 16, 2022
Delightful JavaScript Testing.

?? Delightful JavaScript Testing ????‍?? Developer Ready: A comprehensive JavaScript testing solution. Works out of the box for most JavaScript projec

Facebook 41k Jan 4, 2023
A Node.js tool to automate end-to-end web testing.

A Node.js tool to automate end-to-end web testing. Write tests in JS or TypeScript, run them and view results. Homepage • Documentation • FAQ • Suppor

Developer Express Inc. 9.5k Jan 9, 2023
Simple interactive HTTP response mocker, useful for testing API callouts.

Simple interactive HTTP response mocker, useful for testing API callouts.

null 1 Jul 1, 2022
The goal of this app is to make user life easier while testing their own apps

Manual testing app The goal of this app is to make user life easier while testing their own apps. It is used to create the testing workflow, record te

null 1 Jan 2, 2023
☕️ simple, flexible, fun javascript test framework for node.js & the browser

☕️ Simple, flexible, fun JavaScript test framework for Node.js & The Browser ☕️ Links Documentation Release Notes / History / Changes Code of Conduct

Mocha 21.8k Dec 30, 2022
[unmaintained] DalekJS Base framework

DalekJS is not maintained any longer ?? We recommend TestCafé for your automated browser testing needs. dalekjs DalekJS base framework Resources API D

DalekJS 703 Dec 9, 2022
E2E test framework for Angular apps

Protractor Protractor is an end-to-end test framework for Angular and AngularJS applications. Protractor is a Node.js program built on top of WebDrive

Angular 8.8k Jan 2, 2023
JSCover is a JavaScript Code Coverage Tool that measures line, branch and function coverage

JSCover - A JavaScript code coverage measurement tool. JSCover is an easy-to-use JavaScript code coverage measuring tool. It is an enhanced version of

null 392 Nov 20, 2022
Demo Selenium JavaScript E2E tests (end-to-end web browser automation tests)

Demo Selenium JavaScript E2E tests (end-to-end web browser automation tests)

Joel Parker Henderson 1 Oct 9, 2021
🔮 An easy-to-use JavaScript unit testing framework.

QUnit - A JavaScript Unit Testing Framework. QUnit is a powerful, easy-to-use, JavaScript unit testing framework. It's used by the jQuery project to t

QUnit 4k Jan 2, 2023
Harrison Njuguna 5 Nov 11, 2022
Nightwatch.js, Unit testing, Javascript

PayScale Shared UI Cultivated library of shareable components, utilities, and widgets designed for re-use aross products. Installing and Consuming To

Dredsoft 3 Sep 15, 2022
Playwright is a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit with a single API.

?? Playwright Documentation | API reference Playwright is a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit w

Microsoft 46.3k Jan 9, 2023
Javascript-testing-practical-approach-2021-course-v3 - Javascript Testing, a Practical Approach (v3)

Javascript Testing, a Practical Approach Description This is the reference repository with all the contents and the examples of the "Javascript Testin

Stefano Magni 2 Nov 14, 2022
Shopping Cart - Project of HTML, CSS, and JavaScript developed by me (Raphael Martins) at the end of the Unit 9 Module 1 of the Web Development course at Trybe

Project of HTML, CSS, and JavaScript developed by me (Raphael Martins) at the end of the Unit 9 Module 1 of the Web Development course at Trybe. I was approved with 100% of the mandatory and optional requirements met.

Raphael Martins 13 Nov 27, 2022
Automated testing for single-page applications (SPAs). Small, portable, and easy to use. Click on things, fill in values, await for things exist, etc.

SPA Check Automated testing for single-page applications (SPAs). Small, portable, and easy to use. Click on things, fill in values, await for things e

Cory Leigh Rahman 5 Dec 23, 2022