jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/367700 )

Change subject: Replace jasmine expect and custom finders with unexpected-dom
......................................................................


Replace jasmine expect and custom finders with unexpected-dom

unexpected-dom

- already solves most of our custom use cases
- has (arguably) better readability at the cost of string-y API
- allows to compose assertions
- provides great error messages when tests fail
- decouples assertions from the surrounding test runner

Change-Id: I5cd3e30b1461fb46b4a159c111e08005d956ee78
---
M .eslintrc.json
M package.json
M tests/jasmine/GlossWidget.spec.js
3 files changed, 23 insertions(+), 23 deletions(-)

Approvals:
  Aleksey Bekh-Ivanov (WMDE): Looks good to me, approved
  jenkins-bot: Verified



diff --git a/.eslintrc.json b/.eslintrc.json
index 3b970f6..fb37ad9 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -16,8 +16,7 @@
                "Promise": false,
                "global": false,
                "describe": false,
-               "it": false,
-               "expect": false
+               "it": false
        },
        "rules": {
                "dot-notation": "off",
diff --git a/package.json b/package.json
index 3e7950b..13172b3 100644
--- a/package.json
+++ b/package.json
@@ -15,6 +15,8 @@
     "jsdom": "^11.1.0",
     "jsdom-global": "^3.0.2",
     "module-alias": "^2.0.0",
+    "unexpected": "^10.32.1",
+    "unexpected-dom": "^4.0.0",
     "vue": "2.3.3"
   },
   "_moduleAliases": {
diff --git a/tests/jasmine/GlossWidget.spec.js 
b/tests/jasmine/GlossWidget.spec.js
index 43e6f9f..73ed5e0 100644
--- a/tests/jasmine/GlossWidget.spec.js
+++ b/tests/jasmine/GlossWidget.spec.js
@@ -18,10 +18,12 @@
                }
        };
 
+       var expect = require( 'unexpected' ).clone();
+       expect.installPlugin( require( 'unexpected-dom' ) );
        var Vue = global.Vue = require( 'vue/dist/vue.js' );
        global.Vuex = {};
-
        var GlossWidget = require( 'wikibase.lexeme.widgets.GlossWidget' );
+
        it(
                'create with no glosses - when switched to edit mode empty 
gloss is added',
                function () {
@@ -30,7 +32,7 @@
 
                        widget.edit();
 
-                       expect( widget.glosses[ 0 ] ).toEqual( emptyGloss );
+                       expect( widget.glosses[ 0 ], 'to equal', emptyGloss );
                }
        );
 
@@ -43,6 +45,7 @@
                widget.$nextTick( function () {
                        assertWidget( widget ).when( 'switched to edit mode' 
).isInEditMode();
                        assertWidget( widget ).when( 'switched to edit mode' 
).dom.hasAtLeastOneInputField();
+                       expect( widget.$el, 'to contain elements matching', 
'input' );
                        done();
                } );
        } );
@@ -113,13 +116,17 @@
                                glossLanguage: 
'.wikibase-lexeme-sense-gloss-language'
                        };
 
+               expect.addAssertion( '<DOMElement> to have trimmed text 
<string>', function ( expect, subject, value ) {
+                       expect( subject.textContent.trim(), 'to equal', value );
+               } );
+
                return {
                        isInEditMode: function () {
-                               expect( widget.inEditMode ).toBe( true, when + 
'is in edit mode' );
+                               expect( widget.inEditMode, 'to be true' );
 
                        },
                        isNotInEditMode: function () {
-                               expect( widget.inEditMode ).toBe( false, when + 
'is not in edit mode' );
+                               expect( widget.inEditMode, 'to be false' );
                        },
                        when: function ( text ) {
                                when = 'when ' + text + ': ';
@@ -127,26 +134,18 @@
                        },
                        dom: {
                                hasNoInputFields: function () {
-                                       expect( widget.$el.querySelectorAll( 
'input' ).length )
-                                               .toEqual( 0, when + 'DOM has no 
input fields' );
+                                       expect( widget.$el, 'to contain no 
elements matching', 'input' );
                                },
                                hasAtLeastOneInputField: function () {
-                                       expect( widget.$el.querySelectorAll( 
'input' ).length )
-                                               .toBeGreaterThan( 0, when + 
'has at least one input in DOM ' );
+                                       expect( widget.$el, 'to contain 
elements matching', 'input' );
                                },
                                containsGloss: function ( value, language ) {
-                                       var found = false;
-                                       widget.$el.querySelectorAll( 
selector.gloss ).forEach( function ( element ) {
-                                               var domValue = 
element.querySelector( selector.glossValue ).textContent;
-                                               var domLanguage = 
element.querySelector( selector.glossLanguage ).textContent;
-                                               found = found ||
-                                                       domValue.trim() === 
value &&
-                                                       domLanguage.trim() === 
language;
-                                       } );
+                                       var assertGloss = function ( element ) {
+                                               expect( element, 'queried for 
first', selector.glossValue, 'to have trimmed text', value );
+                                               expect( element, 'queried for 
first', selector.glossLanguage, 'to have trimmed text', language );
+                                       };
 
-                                       var message = when + 'DOM contains 
gloss with value "' + value +
-                                               '" and language "' + language + 
'"';
-                                       expect( found ).toBe( true, message );
+                                       expect( widget.$el, 'queried for', 
selector.gloss, 'to have an item satisfying', assertGloss );
                                },
                                containsInputsWithGloss: function ( value, 
language ) {
                                        var found = false;
@@ -161,7 +160,7 @@
 
                                        var message = when + 'DOM contains 
inputs with gloss having value "' + value +
                                                '" and language "' + language + 
'"';
-                                       expect( found ).toBe( true, message );
+                                       expect( found, 'to be true' );
                                },
                                doesntContainInputsWithGloss: function ( value, 
language ) {
                                        var found = false;
@@ -174,7 +173,7 @@
                                        var message = when + 'DOM doesn\'t 
contain inputs with gloss ' +
                                                'having value "' + value + '" 
and language "' + language + '"';
 
-                                       expect( found ).toBe( false, message );
+                                       expect( found, 'to be false' );
                                }
                        }
 

-- 
To view, visit https://gerrit.wikimedia.org/r/367700
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I5cd3e30b1461fb46b4a159c111e08005d956ee78
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/WikibaseLexeme
Gerrit-Branch: master
Gerrit-Owner: Chrisneuroth <[email protected]>
Gerrit-Reviewer: Aleksey Bekh-Ivanov (WMDE) <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to