I'm trying to write a test to to target if a default prop is passed in the HTML correctly using jest
and vue-test-utils
. I can not seem to find my target selector. I want to be able to test that a particular p
tag contains the proper text. In this case if a name prop is passed, it renders that. If not, then the default function renders the default payTo
value.
I've been trying several combinations of chaining to the wrapper to no avail.
console.log(wrapper.html()) // presents all the page html
console.log(wrapper.classes()) // array showing only one class ('.row-space-between')
Here is my component:
<template>
<div class="row-space-between">
<div>
<h3>{{ $t('label.payTo') }}</h3>
<p>{{ merchantName.payTo }}</p> // TARGET SELECTOR
</div>
<div class="align-right">
<h3>{{ $t('label.estimatedTotal') }}</h3>
<p>{{ amount }}</p>
</div>
</div>
</template>
<script>
export default {
name: 'PayTo',
props: {
'merchant-name': {
type: Object,
// default: {} with type obj or arr default function is required
default: function () {
return { merchantName: {
payTo: 'Order Total'
}
}
},
amount: {
type: String,
default: ''
}
}
}
And here is my test:
describe('PayTo.vue', () => {
let wrapper
beforeEach(() => {
wrapper = shallowMount(PayTo, {
mocks: {
$t
},
propsData: {
merchantName: {
payTo: 'foo-merchant-name'
},
amount: '$110.00'
}
})
})
it('[positive] should render correct contents', () => {
// PayTo.props.merchantName.default()
expect(wrapper.html()).toMatchSnapshot()
})
// The following two tests satisfy testing the default function in PayTo.vue props validation if not tested, coverage falls to zero
// This test is meaningless until I can be more specific in targeting
it('[positive] should display `AWS`', () => {
wrapper.setProps({
merchantName: {
payTo: 'AWS'
}
})
expect(wrapper.contains('p'))
})
it('[negative] should display `Order Total`', () => {
wrapper.setProps({
merchantName: {
payTo: 'Order Total'
}
})
console.log(wrapper.contains('div > p'))
expect(wrapper.contains('p'))
})