]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Add instructions for image-based tests to the contributors guide (#6073)
authorBen McCann <322311+benmccann@users.noreply.github.com>
Mon, 25 Feb 2019 08:17:37 +0000 (00:17 -0800)
committerSimon Brunel <simonbrunel@users.noreply.github.com>
Mon, 25 Feb 2019 08:17:37 +0000 (09:17 +0100)
docs/developers/contributing.md

index 71cb55337931f202137a1fc75714822d648daea0..15fc938ae095828d82ba6de90426dffe968a76f5 100644 (file)
@@ -42,6 +42,26 @@ The following commands are now available from the repository root:
 
 More information can be found in [gulpfile.js](https://github.com/chartjs/Chart.js/blob/master/gulpfile.js).
 
+### Image-Based Tests
+
+Some display-related functionality is difficult to test via typical Jasmine units. For this reason, we introduced image-based tests ([#3988](https://github.com/chartjs/Chart.js/pull/3988) and [#5777](https://github.com/chartjs/Chart.js/pull/5777)) to assert that a chart is drawn pixel-for-pixel matching an expected image.
+
+Generated charts in image-based tests should be **as minimal as possible** and focus only on the tested feature to prevent failure if another feature breaks (e.g. disable the title and legend when testing scales).
+
+You can create a new image-based test by following the steps below:
+- Create a JS file ([example](https://github.com/chartjs/Chart.js/blob/f7b671006a86201808402c3b6fe2054fe834fd4a/test/fixtures/controller.bubble/radius-scriptable.js)) or JSON file ([example](https://github.com/chartjs/Chart.js/blob/4b421a50bfa17f73ac7aa8db7d077e674dbc148d/test/fixtures/plugin.filler/fill-line-dataset.json)) that defines chart config and generation options.
+- Add this file in `test/fixtures/{spec.name}/{feature-name}.json`.
+- Add a [describe line](https://github.com/chartjs/Chart.js/blob/4b421a50bfa17f73ac7aa8db7d077e674dbc148d/test/specs/plugin.filler.tests.js#L10) to the beginning of `test/specs/{spec.name}.tests.js` if it doesn't exist yet.
+- Run `gulp unittest --watch --inputs=test/specs/{spec.name}.tests.js`.
+- Click the *"Debug"* button (top/right): a test should fail with the associated canvas visible.
+- Right click on the chart and *"Save image as..."* `test/fixtures/{spec.name}/{feature-name}.png` making sure not to activate the tooltip or any hover functionality
+- Refresh the browser page (`CTRL+R`): test should now pass
+- Verify test relevancy by changing the feature values *slightly* in the JSON file.
+
+Tests should pass in both browsers. In general, we've hidden all text in image tests since it's quite difficult to get them passing between different browsers. As a result, it is recommended to hide all scales in image-based tests. It is also recommended to disable animations. If tests still do not pass, adjust [`tolerance` and/or `threshold`](https://github.com/chartjs/Chart.js/blob/1ca0ffb5d5b6c2072176fd36fa85a58c483aa434/test/jasmine.matchers.js) at the beginning of the JSON file keeping them **as low as possible**.
+
+When a test fails, the expected and actual images are shown. If you'd like to see the images even when the tests pass, set `"debug": true` in the JSON file.
+
 ## Bugs and Issues
 
 Please report these on the GitHub page - at <a href="https://github.com/chartjs/Chart.js" target="_blank">github.com/chartjs/Chart.js</a>. Please do not use issues for support requests. For help using Chart.js, please take a look at the [`chartjs`](https://stackoverflow.com/questions/tagged/chartjs) tag on Stack Overflow.