-
Notifications
You must be signed in to change notification settings - Fork 669
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
0437e26
commit b4331ff
Showing
10 changed files
with
432 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
<template> | ||
<div> | ||
<input type="checkbox" v-model="checkboxVal"> | ||
<input type="radio" v-model="radioVal" id="radioFoo" value="radioFooResult"> | ||
<input type="radio" v-model="radioVal" id="radioBar" value="radioBarResult"> | ||
<input type="text" v-model="textVal"> | ||
<select v-model="selectVal"> | ||
<option value="selectA"></option> | ||
<option value="selectB"></option> | ||
<option value="selectC"></option> | ||
</select> | ||
<label id="label-el"></label> | ||
|
||
<span class="checkboxResult" v-if="checkboxVal">checkbox checked</span> | ||
<span class="counter">{{ counter }}</span> | ||
{{ textVal }} | ||
{{ selectVal }} | ||
{{ radioVal }} | ||
</div> | ||
</template> | ||
|
||
<script> | ||
export default { | ||
name: 'component-with-input', | ||
data () { | ||
return { | ||
checkboxVal: undefined, | ||
textVal: undefined, | ||
radioVal: undefined, | ||
selectVal: undefined, | ||
counter: 0 | ||
} | ||
}, | ||
watch: { | ||
checkboxVal () { | ||
this.counter++ | ||
}, | ||
radioVal () { | ||
this.counter++ | ||
} | ||
} | ||
} | ||
</script> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
import ComponentWithInput from '~resources/components/component-with-input.vue' | ||
import { describeWithShallowAndMount } from '~resources/utils' | ||
|
||
describeWithShallowAndMount('setChecked', (mountingMethod) => { | ||
it('sets element checked true with no option passed', () => { | ||
const wrapper = mountingMethod(ComponentWithInput) | ||
const input = wrapper.find('input[type="checkbox"]') | ||
input.setChecked() | ||
|
||
expect(input.element.checked).to.equal(true) | ||
}) | ||
|
||
it('sets element checked equal to param passed', () => { | ||
const wrapper = mountingMethod(ComponentWithInput) | ||
const input = wrapper.find('input[type="checkbox"]') | ||
|
||
input.setChecked(true) | ||
expect(input.element.checked).to.equal(true) | ||
|
||
input.setChecked(false) | ||
expect(input.element.checked).to.equal(false) | ||
}) | ||
|
||
it('updates dom with checkbox v-model', () => { | ||
const wrapper = mountingMethod(ComponentWithInput) | ||
const input = wrapper.find('input[type="checkbox"]') | ||
|
||
input.setChecked() | ||
expect(wrapper.text()).to.contain('checkbox checked') | ||
|
||
input.setChecked(false) | ||
expect(wrapper.text()).to.not.contain('checkbox checked') | ||
}) | ||
|
||
it('changes state the right amount of times with checkbox v-model', () => { | ||
const wrapper = mountingMethod(ComponentWithInput) | ||
const input = wrapper.find('input[type="checkbox"]') | ||
|
||
input.setChecked() | ||
input.setChecked(false) | ||
input.setChecked(false) | ||
input.setChecked(true) | ||
input.setChecked(false) | ||
input.setChecked(false) | ||
|
||
expect(wrapper.find('.counter').text()).to.equal('4') | ||
}) | ||
|
||
it('updates dom with radio v-model', () => { | ||
const wrapper = mountingMethod(ComponentWithInput) | ||
|
||
wrapper.find('#radioBar').setChecked() | ||
expect(wrapper.text()).to.contain('radioBarResult') | ||
|
||
wrapper.find('#radioFoo').setChecked() | ||
expect(wrapper.text()).to.contain('radioFooResult') | ||
}) | ||
|
||
it('changes state the right amount of times with checkbox v-model', () => { | ||
const wrapper = mountingMethod(ComponentWithInput) | ||
const radioBar = wrapper.find('#radioBar') | ||
const radioFoo = wrapper.find('#radioFoo') | ||
|
||
radioBar.setChecked() | ||
radioBar.setChecked() | ||
radioFoo.setChecked() | ||
radioBar.setChecked() | ||
radioBar.setChecked() | ||
radioFoo.setChecked() | ||
radioFoo.setChecked() | ||
|
||
expect(wrapper.find('.counter').text()).to.equal('4') | ||
}) | ||
|
||
it('throws error if checked param is not boolean', () => { | ||
const message = 'wrapper.setChecked() must be passed a boolean' | ||
shouldThrowErrorOnElement('input[type="checkbox"]', message, 'asd') | ||
}) | ||
|
||
it('throws error if checked param is false on radio element', () => { | ||
const message = 'wrapper.setChecked() cannot be called with parameter false on a <input type="radio" /> element.' | ||
shouldThrowErrorOnElement('#radioFoo', message, false) | ||
}) | ||
|
||
it('throws error if wrapper does not contain element', () => { | ||
const wrapper = mountingMethod({ render: (h) => h('div') }) | ||
const div = wrapper.find('div') | ||
div.element = null | ||
|
||
const fn = () => div.setChecked() | ||
const message = '[vue-test-utils]: cannot call wrapper.setChecked() on a wrapper without an element' | ||
expect(fn).to.throw().with.property('message', message) | ||
}) | ||
|
||
it('throws error if element is select', () => { | ||
const message = 'wrapper.setChecked() cannot be called on a <select> element. Use wrapper.setSelected() instead' | ||
shouldThrowErrorOnElement('select', message) | ||
}) | ||
|
||
it('throws error if element is text like', () => { | ||
const message = 'wrapper.setChecked() cannot be called on "text" inputs. Use wrapper.setValue() instead' | ||
shouldThrowErrorOnElement('input[type="text"]', message) | ||
}) | ||
|
||
it('throws error if element is not valid', () => { | ||
const message = 'wrapper.setChecked() cannot be called on this element' | ||
shouldThrowErrorOnElement('#label-el', message) | ||
}) | ||
|
||
function shouldThrowErrorOnElement (selector, message, value) { | ||
const wrapper = mountingMethod(ComponentWithInput) | ||
const input = wrapper.find(selector) | ||
|
||
const fn = () => input.setChecked(value) | ||
expect(fn).to.throw().with.property('message', '[vue-test-utils]: ' + message) | ||
} | ||
}) |
Oops, something went wrong.