Skip to content

Commit 5a9314b

Browse files
authored
Merge pull request #11 from tim-maguire/add_container
Wraps rendered component in a div
2 parents b26b151 + d0ecb61 commit 5a9314b

File tree

3 files changed

+65
-3
lines changed

3 files changed

+65
-3
lines changed

src/index.js

+11-3
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,15 @@ function render (TestComponent, {
5050

5151
mountedWrappers.add(wrapper)
5252

53+
if (wrapper.element.parentNode === document.body) {
54+
const div = document.createElement('div')
55+
wrapper.element.parentNode.insertBefore(div, wrapper.element)
56+
div.appendChild(wrapper.element)
57+
}
58+
5359
return {
60+
container: wrapper.element.parentNode,
61+
baseElement: document.body,
5462
debug: () => console.log(prettyDOM(wrapper.element)),
5563
unmount: () => wrapper.destroy(),
5664
isUnmounted: () => wrapper.vm._isDestroyed,
@@ -61,7 +69,7 @@ function render (TestComponent, {
6169
return wait()
6270
},
6371
updateState: _ => wrapper.setData(_),
64-
...getQueriesForElement(wrapper.element)
72+
...getQueriesForElement(wrapper.element.parentNode)
6573
}
6674
}
6775

@@ -70,8 +78,8 @@ function cleanup () {
7078
}
7179

7280
function cleanupAtWrapper (wrapper) {
73-
if (wrapper.parentNode === document.body) {
74-
document.body.removeChild(wrapper)
81+
if (wrapper.element.parentNode && wrapper.element.parentNode.parentNode === document.body) {
82+
document.body.removeChild(wrapper.element.parentNode)
7583
}
7684
wrapper.destroy()
7785
mountedWrappers.delete(wrapper)

tests/__tests__/components/Button.vue

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<template>
2+
<button :class="typeClass" @click="clicked">{{ text }}</button>
3+
</template>
4+
5+
<script>
6+
export default {
7+
props: {
8+
text: {
9+
type: String,
10+
default: '',
11+
},
12+
clicked: {
13+
type: Function,
14+
default: () => true
15+
},
16+
type: {
17+
validator: (value) => ['primary', 'secondary'].includes(value),
18+
},
19+
20+
},
21+
computed: {
22+
typeClass: function() {
23+
if (this.type) {
24+
return `button button--${this.type}`;
25+
}
26+
return 'button';
27+
},
28+
},
29+
30+
};
31+
</script>

tests/__tests__/simple-button.js

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { render, cleanup, fireEvent } from '../../src';
2+
import SimpleButton from './components/Button';
3+
4+
afterEach(cleanup)
5+
6+
test('renders button with text', () => {
7+
const buttonText = "Click me; I'm sick"
8+
const { getByText } = render(SimpleButton, {
9+
props: { text: buttonText, clicked: () => true }
10+
})
11+
12+
getByText(buttonText)
13+
})
14+
15+
test('clicked prop is called when button is clicked', () => {
16+
const clicked = jest.fn()
17+
const text = 'Click me'
18+
const { getByText } = render(SimpleButton, {
19+
props: { text, clicked }
20+
})
21+
fireEvent.click(getByText(text))
22+
expect(clicked).toBeCalled()
23+
})

0 commit comments

Comments
 (0)