[Libreoffice-commits] online.git: cypress_test/eslint_plugin cypress_test/.eslintrc cypress_test/integration_tests cypress_test/package.json
Tamás Zolnai (via logerrit)
logerrit at kemper.freedesktop.org
Tue Apr 28 16:43:14 UTC 2020
cypress_test/.eslintrc | 4 +
cypress_test/eslint_plugin/index.js | 31 ++++++++++
cypress_test/eslint_plugin/package.json | 5 +
cypress_test/integration_tests/mobile/calc/insertion_wizard_spec.js | 2
cypress_test/package.json | 1
5 files changed, 42 insertions(+), 1 deletion(-)
New commits:
commit af76b48460c84d73dafd4f756fb923032104e7a1
Author: Tamás Zolnai <tamas.zolnai at collabora.com>
AuthorDate: Tue Apr 28 16:00:15 2020 +0200
Commit: Tamás Zolnai <tamas.zolnai at collabora.com>
CommitDate: Tue Apr 28 18:42:56 2020 +0200
cypress: add a custom ESLint rule against cy.get().contains() usage.
Since cypress retries only the last command, it's better to use
the compact cy.contains(selector, content) version, instead of
cy.get(selector).contains(content) call.
Change-Id: Ie1f4c17bbf736058ecf6bd996b46384fdff19446
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/93081
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Tamás Zolnai <tamas.zolnai at collabora.com>
diff --git a/cypress_test/.eslintrc b/cypress_test/.eslintrc
index bd0576c25..19001679f 100644
--- a/cypress_test/.eslintrc
+++ b/cypress_test/.eslintrc
@@ -1,5 +1,9 @@
{
"extends": "../loleaflet/.eslintrc",
+ "plugins": ["cypress-rules"],
+ "rules": {
+ "cypress-rules/no-get-contains-chain": 2
+ },
"parserOptions": {
"ecmaVersion": 6,
"sourceType": "module",
diff --git a/cypress_test/eslint_plugin/index.js b/cypress_test/eslint_plugin/index.js
new file mode 100644
index 000000000..4c2d71c16
--- /dev/null
+++ b/cypress_test/eslint_plugin/index.js
@@ -0,0 +1,31 @@
+module.exports = {
+ rules: {
+ 'no-get-contains-chain': {
+ /**
+ * Catches cy.get(selector).contains(content) calls in the code.
+ *
+ * Issue: In cypress test framework only the last command is retried.
+ * In this case it's the contains method and so the get() method is
+ * not retried. Sometimes, it behaves unexpectedly, because the DOM
+ * has the correct item matching with both the selector and the content,
+ * but the test still fails on this command chain.
+ *
+ * Fix 1: When we use the content as a selector. In this case, we can use
+ * cy.contains(selector, content) instead. This is compact command which
+ * will retry to match both the selector and the content.
+ *
+ * Fix 2: When we need an assertion about the content. In this case, we can
+ * use cy.contains(selector, content) or cy.get(selector).should('have.text', content)
+ * is also a good replacement.
+ *
+ **/
+ create: function(context) {
+ return {
+ 'CallExpression[callee.property.name=\'contains\'][callee.object.callee.property.name=\'get\']': function(node) {
+ context.report(node, 'Do not chain get() and contains(). Use cy.contains(selector, content) instead for better retriability!');
+ }
+ };
+ }
+ }
+ }
+};
diff --git a/cypress_test/eslint_plugin/package.json b/cypress_test/eslint_plugin/package.json
new file mode 100644
index 000000000..fdf878c7f
--- /dev/null
+++ b/cypress_test/eslint_plugin/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "eslint-plugin-cypress-rules",
+ "version": "1.0.0",
+ "main": "index.js"
+}
diff --git a/cypress_test/integration_tests/mobile/calc/insertion_wizard_spec.js b/cypress_test/integration_tests/mobile/calc/insertion_wizard_spec.js
index d19e92ca6..59c2c41e0 100644
--- a/cypress_test/integration_tests/mobile/calc/insertion_wizard_spec.js
+++ b/cypress_test/integration_tests/mobile/calc/insertion_wizard_spec.js
@@ -64,7 +64,7 @@ describe('Calc insertion wizard.', function() {
calcHelper.selectAllMobile();
cy.get('#copy-paste-container table td a')
- .contains('some text');
+ .should('have.text', 'some text');
cy.get('#copy-paste-container table td a')
.should('have.attr', 'href', 'http://www.something.com');
diff --git a/cypress_test/package.json b/cypress_test/package.json
index cfdad5618..c14652ccd 100644
--- a/cypress_test/package.json
+++ b/cypress_test/package.json
@@ -7,6 +7,7 @@
"cypress": "4.3.0",
"cypress-failed-log": "2.6.2",
"eslint": "6.8.0",
+ "eslint-plugin-cypress-rules": "file:eslint_plugin",
"get-port-cli": "2.0.0",
"wait-on": "4.0.0"
},
More information about the Libreoffice-commits
mailing list