0
0
mirror of https://github.com/twbs/bootstrap.git synced 2024-12-01 13:24:25 +01:00
Bootstrap/js/tests
Patrick H. Lauke 18e8704221 Fix collapse.js aria-expanded behavior
* Remove aria-expanded from collapse.js target element

aria-expanded="true"/aria-expanded="false" only applies to the trigger,
not the element that is being expanded/collapsed.

* Tweak collapse.js accessibility section

...to make it clearer that the aria-expanded attribute always just goes
on the control.

* Fix collapse.js unit tests

- reword some of the text to make it clear we're checking behavior of
trigger/control
- move incorrect aria-expanded out of the <div>s and to the actual
trigger/control <a>s
- fix incorrect test assertion text output false -> true
2017-04-10 14:51:22 +01:00
..
unit Fix collapse.js aria-expanded behavior 2017-04-10 14:51:22 +01:00
vendor Update dependencies. 2017-03-20 17:37:05 +11:00
visual Tabs/Scrollspy/.nav/.list-group/.active independent of markup (<nav>, .nav-item, <li> etc...) 2017-04-02 11:21:04 +02:00
.eslintrc.json Extend ESLint to cover all JS files and drop JSCS. 2016-12-31 16:49:15 +11:00
index.html Refactor QUnit test page. 2017-02-22 11:14:47 +11:00
README.md Fix broken/redirected links, moving to HTTPS where possible. (#20557) 2016-10-03 09:55:59 -07:00

How does Bootstrap's test suite work?

Bootstrap uses QUnit, a powerful, easy-to-use JavaScript unit test framework. Each plugin has a file dedicated to its tests in unit/<plugin-name>.js.

  • unit/ contains the unit test files for each Bootstrap plugin.
  • vendor/ contains third-party testing-related code (QUnit and jQuery).
  • visual/ contains "visual" tests which are run interactively in real browsers and require manual verification by humans.

To run the unit test suite via PhantomJS, run grunt test-js.

To run the unit test suite via a real web browser, open index.html in the browser.

How do I add a new unit test?

  1. Locate and open the file dedicated to the plugin which you need to add tests to (unit/<plugin-name>.js).
  2. Review the QUnit API Documentation and use the existing tests as references for how to structure your new tests.
  3. Write the necessary unit test(s) for the new or revised functionality.
  4. Run grunt test-js to see the results of your newly-added test(s).

Note: Your new unit tests should fail before your changes are applied to the plugin, and should pass after your changes are applied to the plugin.

What should a unit test look like?

  • Each test should have a unique name clearly stating what unit is being tested.
  • Each test should test only one unit per test, although one test can include several assertions. Create multiple tests for multiple units of functionality.
  • Each test should begin with assert.expect to ensure that the expected assertions are run.
  • Each test should follow the project's JavaScript Code Guidelines

Example tests

// Synchronous test
QUnit.test('should describe the unit being tested', function (assert) {
  assert.expect(1)
  var templateHTML = '<div class="alert alert-danger fade in">'
      + '<a class="close" href="#" data-dismiss="alert">×</a>'
      + '<p><strong>Template necessary for the test.</p>'
      + '</div>'
  var $alert = $(templateHTML).appendTo('#qunit-fixture').bootstrapAlert()

  $alert.find('.close').click()

  // Make assertion
  assert.strictEqual($alert.hasClass('in'), false, 'remove .in class on .close click')
})

// Asynchronous test
QUnit.test('should describe the unit being tested', function (assert) {
  assert.expect(1)
  var done = assert.async()

  $('<div title="tooltip title"></div>')
    .appendTo('#qunit-fixture')
    .on('shown.bs.tooltip', function () {
      assert.ok(true, '"shown" event was fired after calling "show"')
      done()
    })
    .bootstrapTooltip('show')
})