jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/373057 )
Change subject: Refactor LemmaWidget.spec.js
......................................................................
Refactor LemmaWidget.spec.js
Change-Id: I33e13d57e9ae5e2205fcce36c360b3e5e15ee757
---
M package.json
M tests/jasmine/LemmaWidget.spec.js
2 files changed, 45 insertions(+), 50 deletions(-)
Approvals:
WMDE-leszek: Looks good to me, approved
jenkins-bot: Verified
diff --git a/package.json b/package.json
index b5fed2d..ea60458 100644
--- a/package.json
+++ b/package.json
@@ -17,6 +17,7 @@
"sinon": "^3.2.1",
"unexpected": "^10.32.1",
"unexpected-dom": "^4.0.0",
+ "unexpected-sinon": "^10.8.2",
"vue": "2.3.3",
"vuex": "^2.3.1"
},
diff --git a/tests/jasmine/LemmaWidget.spec.js
b/tests/jasmine/LemmaWidget.spec.js
index 044e3d8..c194dbf 100644
--- a/tests/jasmine/LemmaWidget.spec.js
+++ b/tests/jasmine/LemmaWidget.spec.js
@@ -5,6 +5,7 @@
var sinon = require( 'sinon' );
var expect = require( 'unexpected' ).clone();
expect.installPlugin( require( 'unexpected-dom' ) );
+ expect.installPlugin( require( 'unexpected-sinon' ) );
var Vue = global.Vue = require( 'vue/dist/vue.js' );
var Vuex = global.Vuex = require( 'vuex/dist/vuex.js' );
@@ -17,18 +18,17 @@
it( 'initialize widget with one lemma', function () {
var widget = newWidget( [ new Lemma( 'hello', 'en' ) ] );
- assertWidget( widget ).dom.containsLemma( 'hello', 'en' );
+ expect( widget.$el, 'to contain lemma', new Lemma( 'hello',
'en' ) );
} );
- it( 'switch to edit mode', function ( done ) {
+ it( 'switches to edit mode', function ( done ) {
var widget = newWidget( [ new Lemma( 'hello', 'en' ) ] );
- assertWidget( widget ).dom.hasNoInputFields();
+ expect( widget, 'not to be in edit mode' );
widget.edit();
widget.$nextTick( function () {
- assertWidget( widget ).isInEditMode();
- assertWidget( widget ).dom.hasAtLeastOneInputField();
+ expect( widget, 'to be in edit mode' );
done();
} );
} );
@@ -39,7 +39,7 @@
widget.edit();
widget.cancel();
widget.$nextTick( function () {
- assertWidget( widget ).dom.hasNoInputFields();
+ expect( widget, 'not to be in edit mode' );
done();
} );
} );
@@ -47,11 +47,11 @@
it( 'add a new lemma', function ( done ) {
var widget = newWidget( [ new Lemma( 'hello', 'en' ) ] );
- assertWidget( widget ).dom.containsLemma( 'hello', 'en' );
+ expect( widget.$el, 'to contain lemma', new Lemma( 'hello',
'en' ) );
widget.add();
widget.$nextTick( function () {
- assertWidget( widget ).dom.containsLemma( 'hello', 'en'
);
- assertWidget( widget ).dom.containsLemma( '', '' );
+ expect( widget.$el, 'to contain lemma', new Lemma(
'hello', 'en' ) );
+ expect( widget.$el, 'to contain lemma', new Lemma( '',
'' ) );
done();
} );
} );
@@ -60,10 +60,10 @@
var lemmaToRemove = new Lemma( 'hello', 'en' ),
widget = newWidget( [ lemmaToRemove ] );
- assertWidget( widget ).dom.containsLemma( 'hello', 'en' );
+ expect( widget.$el, 'to contain lemma', new Lemma( 'hello',
'en' ) );
widget.remove( lemmaToRemove );
widget.$nextTick( function () {
- assertWidget( widget ).dom.containsNoLemmas();
+ expect( widget.$el, 'to contain no lemmas' );
done();
} );
} );
@@ -78,9 +78,8 @@
widget.edit();
widget.save().then( function () {
- expect( storeSpy.called, 'to be true' );
- expect( storeSpy.calledWith( 'save', lemmas ), 'to be
true' );
- assertWidget( widget ).isNotInEditMode();
+ expect( storeSpy, 'to have a call satisfying', [
'save', lemmas ] );
+ expect( widget, 'not to be in edit mode' );
done();
} );
} );
@@ -97,51 +96,46 @@
function newWidgetWithStore( store ) {
var element = document.createElement( 'div' );
- return new Vue( newLemmaWidget( store, element, getTemplate(),
messages ) );
+ return new Vue( newLemmaWidget( store, element, getTemplate(),
{ get: function ( key ) { return key; } } ) );
}
- function assertWidget( widget ) {
- var selector = {
- lemma: '.lemma-widget_lemma',
- lemmaValue: '.lemma-widget_lemma-value',
- lemmaLanguage: '.lemma-widget_lemma-language'
- };
+ var selector = {
+ lemma: '.lemma-widget_lemma',
+ lemmaValue: '.lemma-widget_lemma-value',
+ lemmaLanguage: '.lemma-widget_lemma-language'
+ };
- return {
- isInEditMode: function () {
- expect( widget.inEditMode, 'to be true' );
- },
- isNotInEditMode: function () {
- expect( widget.inEditMode, 'to be false' );
- },
- dom: {
- hasNoInputFields: function () {
- expect( widget.$el, 'to contain no
elements matching', 'input' );
- },
- hasAtLeastOneInputField: function () {
- expect( widget.$el, 'to contain
elements matching', 'input' );
- },
- containsNoLemmas: function () {
- expect( widget.$el, 'to contain no
elements matching', selector.lemma );
- },
- containsLemma: function ( value, language ) {
- var found = false;
- widget.$el.querySelectorAll(
selector.lemma ).forEach( function ( element ) {
- var lemmaValue =
element.querySelector( selector.lemmaValue ).textContent,
- lemmaLanguage =
element.querySelector( selector.lemmaLanguage ).textContent;
- found = found || lemmaValue ===
value && lemmaLanguage === language;
- } );
+ expect.addAssertion( '<DOMElement> to contain lemma <object>', function
( expect, element, lemma ) {
+ var language = lemma.language;
+ var value = lemma.value;
+ expect.errorMode = 'nested';
+ expect(
+ element,
+ 'when queried for', selector.lemma + ' ' +
selector.lemmaValue,
+ 'to have an item satisfying', 'to have text', value );
+ expect(
+ element,
+ 'when queried for', selector.lemma + ' ' +
selector.lemmaLanguage,
+ 'to have an item satisfying', 'to have text', language
);
+ } );
- expect( found, 'to be true' );
- }
- }
+ expect.addAssertion( '<DOMElement> to contain [no] lemmas', function (
expect, element ) {
+ expect.errorMode = 'nested';
+ expect( element, 'to contain [no] elements matching',
selector.lemma );
+ } );
- };
- }
+ expect.addAssertion( '<object> [not] to be in edit mode', function (
expect, widget ) {
+ expect.errorMode = 'nested';
+
+ expect( widget.inEditMode, '[not] to be true' ); // TODO: why
test internals?
+ var no = expect.flags.not ? ' no ' : ' ';
+ expect( widget.$el, 'to contain' + no + 'elements matching',
'input' );
+ } );
// FIXME: duplicated from LexemeView.php until it's reusable
function getTemplate() {
return '<div class="lemma-widget">\n <ul v-if="!inEditMode"
class="lemma-widget_lemma-list">\n <li v-for="lemma in lemmas"
class="lemma-widget_lemma">\n <span
class="lemma-widget_lemma-value">{{lemma.value}}</span>\n <span
class="lemma-widget_lemma-language">{{lemma.language}}</span>\n </li>\n
</ul>\n <div v-else>\n <div class="lemma-widget_edit-area">\n
<ul class="lemma-widget_lemma-list">\n <li v-for="lemma in
lemmas" class="lemma-widget_lemma-edit-box">\n <input
size="1" class="lemma-widget_lemma-value-input" \n
v-model="lemma.value" :disabled="isSaving">\n <input
size="1" class="lemma-widget_lemma-language-input" \n
v-model="lemma.language" :disabled="isSaving">\n <button
class="lemma-widget_lemma-remove" v-on:click="remove(lemma)" \n
:disabled="isSaving" :title="\'wikibase-remove\'|message">\n
×\n </button>\n </li>\n
<li>\n <button type="button"
class="lemma-widget_add" v-on:click="add" \n
:disabled="isSaving" :title="\'wikibase-add\'|message">+</button>\n
</li>\n </ul>\n </div>\n </div>\n <div
class="lemma-widget_controls">\n <button type="button"
class="lemma-widget_control" v-if="!inEditMode" \n
:disabled="isSaving" v-on:click="edit">{{\'wikibase-edit\'|message}}</button>\n
<button type="button" class="lemma-widget_control" v-if="inEditMode" \n
:disabled="isSaving"
v-on:click="save">{{\'wikibase-save\'|message}}</button>\n <button
type="button" class="lemma-widget_control" v-if="inEditMode" \n
:disabled="isSaving"
v-on:click="cancel">{{\'wikibase-cancel\'|message}}</button>\n
</div>\n</div>';
}
+
} );
--
To view, visit https://gerrit.wikimedia.org/r/373057
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I33e13d57e9ae5e2205fcce36c360b3e5e15ee757
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/WikibaseLexeme
Gerrit-Branch: master
Gerrit-Owner: Chrisneuroth <[email protected]>
Gerrit-Reviewer: Jakob <[email protected]>
Gerrit-Reviewer: Jonas Kress (WMDE) <[email protected]>
Gerrit-Reviewer: Thiemo Mättig (WMDE) <[email protected]>
Gerrit-Reviewer: WMDE-leszek <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits