diff --git a/src/components/form/fixtures/form-row.html b/src/components/form/fixtures/form-row.html
deleted file mode 100644
index 4a20d9ad563..00000000000
--- a/src/components/form/fixtures/form-row.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- default
-
-
- custom
-
diff --git a/src/components/form/fixtures/form-row.js b/src/components/form/fixtures/form-row.js
deleted file mode 100644
index 0bae7b95202..00000000000
--- a/src/components/form/fixtures/form-row.js
+++ /dev/null
@@ -1,3 +0,0 @@
-window.app = new Vue({
- el: '#app'
-})
diff --git a/src/components/form/fixtures/form-text.html b/src/components/form/fixtures/form-text.html
deleted file mode 100644
index ef374375d94..00000000000
--- a/src/components/form/fixtures/form-text.html
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
- default
-
-
- custom
-
-
- variant
-
-
- inline
-
diff --git a/src/components/form/fixtures/form-text.js b/src/components/form/fixtures/form-text.js
deleted file mode 100644
index 0bae7b95202..00000000000
--- a/src/components/form/fixtures/form-text.js
+++ /dev/null
@@ -1,3 +0,0 @@
-window.app = new Vue({
- el: '#app'
-})
diff --git a/src/components/form/fixtures/form.html b/src/components/form/fixtures/form.html
deleted file mode 100644
index b05fde2bcf9..00000000000
--- a/src/components/form/fixtures/form.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
- default
-
- inline
-
- browser
-
- validation
-
diff --git a/src/components/form/fixtures/form.js b/src/components/form/fixtures/form.js
deleted file mode 100644
index 0bae7b95202..00000000000
--- a/src/components/form/fixtures/form.js
+++ /dev/null
@@ -1,3 +0,0 @@
-window.app = new Vue({
- el: '#app'
-})
diff --git a/src/components/form/form-row.spec.js b/src/components/form/form-row.spec.js
index 0a18a03aaca..db52d1b342c 100644
--- a/src/components/form/form-row.spec.js
+++ b/src/components/form/form-row.spec.js
@@ -1,48 +1,12 @@
-import { loadFixture, testVM } from '../../../tests/utils'
+import FormRow from './form-row'
+import { mount } from '@vue/test-utils'
-describe('form-row', () => {
- beforeEach(loadFixture(__dirname, 'form-row'))
- testVM()
+// This component is also fully tested under the layout tests
- it('default should contain base class', async () => {
- const {
- app: { $refs }
- } = window
- expect($refs.default).toHaveClass('form-row')
- })
-
- it('custom should contain base class', async () => {
- const {
- app: { $refs }
- } = window
- expect($refs.custom).toHaveClass('form-row')
- })
-
- it('default should have content', async () => {
- const {
- app: { $refs }
- } = window
- expect($refs.default.textContent).toContain('default')
- })
-
- it('custom should have content', async () => {
- const {
- app: { $refs }
- } = window
- expect($refs.custom.textContent).toContain('custom')
- })
-
- it('default should have tag div', async () => {
- const {
- app: { $refs }
- } = window
- expect($refs.default).toBeElement('div')
- })
-
- it('custom should have tag p', async () => {
- const {
- app: { $refs }
- } = window
- expect($refs.custom).toBeElement('p')
+describe('form > form-row', () => {
+ it('works', () => {
+ const wrapper = mount(FormRow)
+ expect(wrapper.is('div')).toBe(true)
+ expect(wrapper.classes()).toContain('form-row')
})
})
diff --git a/src/components/form/form-text.spec.js b/src/components/form/form-text.spec.js
index fbbeed68ff9..c6864047b7d 100644
--- a/src/components/form/form-text.spec.js
+++ b/src/components/form/form-text.spec.js
@@ -1,104 +1,81 @@
-import { loadFixture, testVM } from '../../../tests/utils'
+import FormText from './form-text'
+import { mount } from '@vue/test-utils'
-describe('form-text', () => {
- beforeEach(loadFixture(__dirname, 'form-text'))
- testVM()
+describe('form > form-text', () => {
+ it('has expected default structure', async () => {
+ const wrapper = mount(FormText)
- it('default should be tag small', async () => {
- const {
- app: { $refs }
- } = window
- expect($refs.default).toBeElement('small')
+ expect(wrapper.is('small')).toBe(true)
+ expect(wrapper.classes()).toContain('form-text')
+ expect(wrapper.classes()).toContain('text-muted')
+ expect(wrapper.classes().length).toBe(2)
+ expect(wrapper.text()).toEqual('')
})
- it('default should have id', async () => {
- const {
- app: { $refs }
- } = window
- expect($refs.default.getAttribute('id')).toBe('default')
- })
-
- it('default should have base class', async () => {
- const {
- app: { $refs }
- } = window
- expect($refs.default).toHaveClass('form-text')
- })
+ it('renders default slot content', async () => {
+ const wrapper = mount(FormText, {
+ slots: {
+ default: 'foobar'
+ }
+ })
- it('default should have muted variant', async () => {
- const {
- app: { $refs }
- } = window
- expect($refs.default).toHaveClass('text-muted')
+ expect(wrapper.is('small')).toBe(true)
+ expect(wrapper.classes()).toContain('form-text')
+ expect(wrapper.classes()).toContain('text-muted')
+ expect(wrapper.classes().length).toBe(2)
+ expect(wrapper.text()).toEqual('foobar')
})
- it('default should have content', async () => {
- const {
- app: { $refs }
- } = window
- expect($refs.default.textContent).toContain('default')
- })
+ it('renders custom root element when prop tag set', async () => {
+ const wrapper = mount(FormText, {
+ propsData: {
+ tag: 'p'
+ }
+ })
- it('custom should be tag p', async () => {
- const {
- app: { $refs }
- } = window
- expect($refs.custom).toBeElement('p')
+ expect(wrapper.is('p')).toBe(true)
+ expect(wrapper.classes()).toContain('form-text')
+ expect(wrapper.classes()).toContain('text-muted')
+ expect(wrapper.classes().length).toBe(2)
+ expect(wrapper.text()).toEqual('')
})
- it('custom should have base class', async () => {
- const {
- app: { $refs }
- } = window
- expect($refs.custom).toHaveClass('form-text')
- })
+ it('has user supplied ID', async () => {
+ const wrapper = mount(FormText, {
+ propsData: {
+ id: 'foo'
+ }
+ })
- it('custom should have content', async () => {
- const {
- app: { $refs }
- } = window
- expect($refs.custom.textContent).toContain('custom')
+ expect(wrapper.is('small')).toBe(true)
+ expect(wrapper.attributes('id')).toBeDefined()
+ expect(wrapper.attributes('id')).toEqual('foo')
})
- it('variant should have base class', async () => {
- const {
- app: { $refs }
- } = window
- expect($refs.variant).toHaveClass('form-text')
- })
+ it('does not have class form-text when prop inline set', async () => {
+ const wrapper = mount(FormText, {
+ propsData: {
+ inline: true
+ }
+ })
- it('variant should have danger variant', async () => {
- const {
- app: { $refs }
- } = window
- expect($refs.variant).toHaveClass('text-danger')
+ expect(wrapper.is('small')).toBe(true)
+ expect(wrapper.classes()).not.toContain('form-text')
+ expect(wrapper.classes()).toContain('text-muted')
+ expect(wrapper.classes().length).toBe(1)
})
- it('variant should have danger variant', async () => {
- const {
- app: { $refs }
- } = window
- expect($refs.variant.textContent).toContain('variant')
- })
-
- it('inline should not have base class', async () => {
- const {
- app: { $refs }
- } = window
- expect($refs.inline).not.toHaveClass('form-text')
- })
-
- it('inline should have variant muted', async () => {
- const {
- app: { $refs }
- } = window
- expect($refs.inline).toHaveClass('text-muted')
- })
+ it('has variant class applied when prop text-variant is set', async () => {
+ const wrapper = mount(FormText, {
+ propsData: {
+ textVariant: 'info'
+ }
+ })
- it('inline should have content', async () => {
- const {
- app: { $refs }
- } = window
- expect($refs.inline.textContent).toContain('inline')
+ expect(wrapper.is('small')).toBe(true)
+ expect(wrapper.classes()).toContain('form-text')
+ expect(wrapper.classes()).toContain('text-info')
+ expect(wrapper.classes().length).toBe(2)
+ expect(wrapper.text()).toEqual('')
})
})
diff --git a/src/components/form/form.spec.js b/src/components/form/form.spec.js
index b7ecf021b95..794a56ca8a8 100644
--- a/src/components/form/form.spec.js
+++ b/src/components/form/form.spec.js
@@ -1,6 +1,85 @@
-import { loadFixture, testVM } from '../../../tests/utils'
+import Form from './form'
+import { mount } from '@vue/test-utils'
describe('form', () => {
- beforeEach(loadFixture(__dirname, 'form'))
- testVM()
+ it('has expected default structure', async () => {
+ const wrapper = mount(Form)
+
+ expect(wrapper.is('form')).toBe(true)
+ expect(wrapper.classes().length).toBe(0)
+ expect(wrapper.text()).toEqual('')
+ })
+
+ it('renders default slot content', async () => {
+ const wrapper = mount(Form, {
+ slots: {
+ default: 'foobar'
+ }
+ })
+
+ expect(wrapper.is('form')).toBe(true)
+ expect(wrapper.classes().length).toBe(0)
+ expect(wrapper.attributes('id')).not.toBeDefined()
+ expect(wrapper.attributes('novalidate')).not.toBeDefined()
+ expect(wrapper.text()).toEqual('foobar')
+ })
+
+ it('has class form-inline when prop inline set', async () => {
+ const wrapper = mount(Form, {
+ propsData: {
+ inline: true
+ }
+ })
+
+ expect(wrapper.is('form')).toBe(true)
+ expect(wrapper.classes()).toContain('form-inline')
+ expect(wrapper.classes().length).toBe(1)
+ expect(wrapper.attributes('id')).not.toBeDefined()
+ expect(wrapper.attributes('novalidate')).not.toBeDefined()
+ expect(wrapper.text()).toEqual('')
+ })
+
+ it('has class was-validation when prop validated set', async () => {
+ const wrapper = mount(Form, {
+ propsData: {
+ validated: true
+ }
+ })
+
+ expect(wrapper.is('form')).toBe(true)
+ expect(wrapper.classes()).toContain('was-validated')
+ expect(wrapper.classes().length).toBe(1)
+ expect(wrapper.attributes('id')).not.toBeDefined()
+ expect(wrapper.attributes('novalidate')).not.toBeDefined()
+ expect(wrapper.text()).toEqual('')
+ })
+
+ it('has user supplied id', async () => {
+ const wrapper = mount(Form, {
+ propsData: {
+ id: 'foo'
+ }
+ })
+
+ expect(wrapper.is('form')).toBe(true)
+ expect(wrapper.classes().length).toBe(0)
+ expect(wrapper.attributes('id')).toBeDefined()
+ expect(wrapper.attributes('id')).toEqual('foo')
+ expect(wrapper.attributes('novalidate')).not.toBeDefined()
+ expect(wrapper.text()).toEqual('')
+ })
+
+ it('has attribute novalidate when prop novalidate set', async () => {
+ const wrapper = mount(Form, {
+ propsData: {
+ novalidate: true
+ }
+ })
+
+ expect(wrapper.is('form')).toBe(true)
+ expect(wrapper.classes().length).toBe(0)
+ expect(wrapper.attributes('id')).not.toBeDefined()
+ expect(wrapper.attributes('novalidate')).toBeDefined()
+ expect(wrapper.text()).toEqual('')
+ })
})
diff --git a/src/components/image/img-lazy.spec.js b/src/components/image/img-lazy.spec.js
index 67111481a88..78eb710abcc 100644
--- a/src/components/image/img-lazy.spec.js
+++ b/src/components/image/img-lazy.spec.js
@@ -15,6 +15,21 @@ describe('img-lazy', () => {
wrapper.destroy()
})
+ it('is initially shown show prop is set', async () => {
+ const wrapper = mount(ImgLazy, {
+ propsData: {
+ src: src,
+ show: true
+ }
+ })
+ expect(wrapper.is('img')).toBe(true)
+
+ expect(wrapper.attributes('src')).toBeDefined()
+ expect(wrapper.attributes('src')).toBe(src)
+
+ wrapper.destroy()
+ })
+
it('shows when show prop is set', async () => {
const wrapper = mount(ImgLazy, {
propsData: {
diff --git a/src/components/image/img.spec.js b/src/components/image/img.spec.js
index a9176c5e78f..68f2b6301d8 100644
--- a/src/components/image/img.spec.js
+++ b/src/components/image/img.spec.js
@@ -1,158 +1,193 @@
-import { loadFixture, testVM } from '../../../tests/utils'
+import Img from './img'
+import { mount } from '@vue/test-utils'
describe('img', () => {
- beforeEach(loadFixture(__dirname, 'image'))
- testVM()
-
- it("all should be rendered with an 'img' tag", async () => {
- const {
- app: { $refs }
- } = window
- ;[
- 'default',
- 'fluid',
- 'thumbnail',
- 'rounded',
- 'roundedTop',
- 'left',
- 'right',
- 'center',
- 'blank',
- 'blankSize',
- 'blankSrc'
- ].forEach(ref => {
- const img = $refs[ref]
- expect(img).toBeDefined()
- expect(img).toBeElement('img')
- })
+ it('has expected default structure', async () => {
+ const wrapper = mount(Img)
+
+ expect(wrapper.is('img')).toBe(true)
+ expect(wrapper.classes().length).toBe(0)
+ expect(wrapper.attributes('width')).not.toBeDefined()
+ expect(wrapper.attributes('height')).not.toBeDefined()
})
- it("all but blanks should have 'src' starting with 'https://picsum.photos'", async () => {
- const {
- app: { $refs }
- } = window
- ;['default', 'fluid', 'thumbnail', 'rounded', 'roundedTop', 'left', 'right', 'center'].forEach(
- ref => {
- const img = $refs[ref]
- expect(img).toBeDefined()
- expect(img.getAttribute('src')).toContain('https://picsum.photos')
+ it('has src attribute when prop src is set', async () => {
+ const wrapper = mount(Img, {
+ propsData: {
+ src: '/foo/bar'
}
- )
- ;['blank', 'blankSize', 'blankSrc'].forEach(ref => {
- const img = $refs[ref]
- expect(img).toBeDefined()
- expect(img.getAttribute('src')).not.toContain('https://picsum.photos')
})
+ expect(wrapper.is('img')).toBe(true)
+
+ expect(wrapper.attributes('src')).toBeDefined()
+ expect(wrapper.attributes('src')).toEqual('/foo/bar')
+ expect(wrapper.attributes('width')).not.toBeDefined()
+ expect(wrapper.attributes('height')).not.toBeDefined()
})
- it('default should not have any classes', async () => {
- const {
- app: { $refs }
- } = window
- const img = $refs.default
- expect(img).toBeDefined()
- expect(img.className).toBe('')
+ it('should have class "img-fluid" when prop fluid set', async () => {
+ const wrapper = mount(Img, {
+ propsData: {
+ src: '/foo/bar',
+ fluid: true
+ }
+ })
+
+ expect(wrapper.is('img')).toBe(true)
+ expect(wrapper.classes()).toContain('img-fluid')
+ expect(wrapper.classes().length).toBe(1)
})
- it("fluid should have class 'img-fluid'", async () => {
- const {
- app: { $refs }
- } = window
- const img = $refs.fluid
- expect(img).toBeDefined()
- expect(img).toHaveClass('img-fluid')
+ it('should have class "img-fluid" and "w-100" when prop fluid-grow set', async () => {
+ const wrapper = mount(Img, {
+ propsData: {
+ src: '/foo/bar',
+ fluidGrow: true
+ }
+ })
+
+ expect(wrapper.is('img')).toBe(true)
+ expect(wrapper.classes()).toContain('img-fluid')
+ expect(wrapper.classes()).toContain('w-100')
+ expect(wrapper.classes().length).toBe(2)
})
- it("thumbnail should have class 'img-thumbnail'", async () => {
- const {
- app: { $refs }
- } = window
- const img = $refs.thumbnail
- expect(img).toBeDefined()
- expect(img).toHaveClass('img-thumbnail')
+ it('should have class "img-thumbnail" when prop thumbnail set', async () => {
+ const wrapper = mount(Img, {
+ propsData: {
+ src: '/foo/bar',
+ thumbnail: true
+ }
+ })
+
+ expect(wrapper.is('img')).toBe(true)
+ expect(wrapper.classes()).toContain('img-thumbnail')
+ expect(wrapper.classes().length).toBe(1)
})
- it("left should have class 'float-left'", async () => {
- const {
- app: { $refs }
- } = window
- const img = $refs.left
- expect(img).toBeDefined()
- expect(img).toHaveClass('float-left')
+ it('should have class "rounded" when prop rounded true', async () => {
+ const wrapper = mount(Img, {
+ propsData: {
+ src: '/foo/bar',
+ rounded: true
+ }
+ })
+
+ expect(wrapper.is('img')).toBe(true)
+ expect(wrapper.classes()).toContain('rounded')
+ expect(wrapper.classes().length).toBe(1)
})
- it("right should have class 'float-right'", async () => {
- const {
- app: { $refs }
- } = window
- const img = $refs.right
- expect(img).toBeDefined()
- expect(img).toHaveClass('float-right')
+ it('should have class "rounded-circle" when prop rounded=circle', async () => {
+ const wrapper = mount(Img, {
+ propsData: {
+ src: '/foo/bar',
+ rounded: 'circle'
+ }
+ })
+
+ expect(wrapper.is('img')).toBe(true)
+ expect(wrapper.classes()).toContain('rounded-circle')
+ expect(wrapper.classes().length).toBe(1)
})
- it("center should have classes 'mx-auto' and 'd-block'", async () => {
- const {
- app: { $refs }
- } = window
- const img = $refs.center
- expect(img).toBeDefined()
- expect(img).toHaveClass('mx-auto')
- expect(img).toHaveClass('d-block')
+ it('should have class "float-left" when prop left set', async () => {
+ const wrapper = mount(Img, {
+ propsData: {
+ src: '/foo/bar',
+ left: true
+ }
+ })
+
+ expect(wrapper.is('img')).toBe(true)
+ expect(wrapper.classes()).toContain('float-left')
+ expect(wrapper.classes().length).toBe(1)
})
- it('blank should have data URI as SRC', async () => {
- const {
- app: { $refs }
- } = window
- const img = $refs.blank
- expect(img).toBeDefined()
- expect(img.getAttribute('src')).toContain('data:image/svg+xml;charset=UTF-8,')
+ it('should have class "float-right" when prop right set', async () => {
+ const wrapper = mount(Img, {
+ propsData: {
+ src: '/foo/bar',
+ right: true
+ }
+ })
+
+ expect(wrapper.is('img')).toBe(true)
+ expect(wrapper.classes()).toContain('float-right')
+ expect(wrapper.classes().length).toBe(1)
})
- it("blank should have width and height set to '1'", async () => {
- const {
- app: { $refs }
- } = window
- const img = $refs.blank
- expect(img).toBeDefined()
- expect(img.getAttribute('width')).toBe('1')
- expect(img.getAttribute('height')).toBe('1')
+ it('should have classes "mx-auto" and "d-block" when prop center set', async () => {
+ const wrapper = mount(Img, {
+ propsData: {
+ src: '/foo/bar',
+ center: true
+ }
+ })
+
+ expect(wrapper.is('img')).toBe(true)
+ expect(wrapper.classes()).toContain('mx-auto')
+ expect(wrapper.classes()).toContain('d-block')
+ expect(wrapper.classes().length).toBe(2)
})
- it('blankSize should have data URI as SRC', async () => {
- const {
- app: { $refs }
- } = window
- const img = $refs.blankSize
- expect(img).toBeDefined()
- expect(img.getAttribute('src')).toContain('data:image/svg+xml;charset=UTF-8,')
+ it('has data URI when blank is true', async () => {
+ const wrapper = mount(Img, {
+ propsData: {
+ blank: true
+ }
+ })
+ expect(wrapper.is('img')).toBe(true)
+
+ expect(wrapper.attributes('src')).toBeDefined()
+ expect(wrapper.attributes('src')).toContain('data:image/svg+xml;charset=UTF-8')
+ expect(wrapper.attributes('width')).toBe('1')
+ expect(wrapper.attributes('height')).toBe('1')
})
- it("blankSize should have color 'blue'", async () => {
- const {
- app: { $refs }
- } = window
- const img = $refs.blankSize
- expect(img).toBeDefined()
- expect(img.getAttribute('src')).toContain('blue')
+ it('has color when blank is true and blank-color set', async () => {
+ const wrapper = mount(Img, {
+ propsData: {
+ blank: true,
+ blankColor: 'blue'
+ }
+ })
+ expect(wrapper.is('img')).toBe(true)
+
+ expect(wrapper.attributes('src')).toBeDefined()
+ expect(wrapper.attributes('src')).toContain('data:image/svg+xml;charset=UTF-8')
+ expect(wrapper.attributes('src')).toContain('blue')
})
- it("blankSize should have width set to '200' and height set to '250'", async () => {
- const {
- app: { $refs }
- } = window
- const img = $refs.blankSize
- expect(img).toBeDefined()
- expect(img.getAttribute('width')).toBe('200')
- expect(img.getAttribute('height')).toBe('250')
+ it('has width and height when blank is true and width/height props set', async () => {
+ const wrapper = mount(Img, {
+ propsData: {
+ blank: true,
+ width: 300,
+ height: 200
+ }
+ })
+ expect(wrapper.is('img')).toBe(true)
+
+ expect(wrapper.attributes('src')).toBeDefined()
+ expect(wrapper.attributes('src')).toContain('data:image/svg+xml;charset=UTF-8')
+ expect(wrapper.attributes('width')).toBe('300')
+ expect(wrapper.attributes('height')).toBe('200')
})
- it('blankSrc should have data URI as SRC', async () => {
- const {
- app: { $refs }
- } = window
- const img = $refs.blankSrc
- expect(img).toBeDefined()
- expect(img.getAttribute('src')).toContain('data:image/svg+xml;charset=UTF-8,')
+ it('has width and height when src set and width/height props set', async () => {
+ const wrapper = mount(Img, {
+ propsData: {
+ src: '/foo/bar',
+ width: 300,
+ height: 200
+ }
+ })
+ expect(wrapper.is('img')).toBe(true)
+
+ expect(wrapper.attributes('src')).toBeDefined()
+ expect(wrapper.attributes('src')).toEqual('/foo/bar')
+ expect(wrapper.attributes('width')).toBe('300')
+ expect(wrapper.attributes('height')).toBe('200')
})
})
diff --git a/src/components/nav/fixtures/nav.html b/src/components/nav/fixtures/nav.html
deleted file mode 100644
index 56e1f31b105..00000000000
--- a/src/components/nav/fixtures/nav.html
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
- Active
- Link
- Another Link
- Disabled
-
-
-
-
-
- Active
- Link
- Another Link
- Disabled
-
-
-
-
-
- Active
- Link
- Another Link
- Disabled
-
-
-
-
-
- Active
-
- one
- two
-
- Text Item
-
-
-
-
-
-
- Active
- Link
- Another Link
- Disabled
-
-
-
-
-
- Active
- Link
- Another Link
- Disabled
-
-
-
-
-
- Active
- Link
- Another Link
- Disabled
-
-
diff --git a/src/components/nav/fixtures/nav.js b/src/components/nav/fixtures/nav.js
deleted file mode 100644
index 0bae7b95202..00000000000
--- a/src/components/nav/fixtures/nav.js
+++ /dev/null
@@ -1,3 +0,0 @@
-window.app = new Vue({
- el: '#app'
-})
diff --git a/src/components/nav/nav-form.spec.js b/src/components/nav/nav-form.spec.js
new file mode 100644
index 00000000000..9d513ecef89
--- /dev/null
+++ b/src/components/nav/nav-form.spec.js
@@ -0,0 +1,26 @@
+import NavForm from './nav-form'
+import { mount } from '@vue/test-utils'
+
+describe('nav > nav-form', () => {
+ it('has expected default structure', async () => {
+ const wrapper = mount(NavForm)
+
+ expect(wrapper.is('form')).toBe(true)
+ expect(wrapper.classes()).toContain('form-inline')
+ expect(wrapper.classes().length).toBe(1)
+ expect(wrapper.text()).toEqual('')
+ })
+
+ it('renders default slot content', async () => {
+ const wrapper = mount(NavForm, {
+ slots: {
+ default: 'foobar'
+ }
+ })
+
+ expect(wrapper.is('form')).toBe(true)
+ expect(wrapper.classes()).toContain('form-inline')
+ expect(wrapper.classes().length).toBe(1)
+ expect(wrapper.text()).toEqual('foobar')
+ })
+})
diff --git a/src/components/nav/nav-text.spec.js b/src/components/nav/nav-text.spec.js
new file mode 100644
index 00000000000..feaf84e2cce
--- /dev/null
+++ b/src/components/nav/nav-text.spec.js
@@ -0,0 +1,39 @@
+import NavText from './nav-text'
+import { mount } from '@vue/test-utils'
+
+describe('nav > nav-text', () => {
+ it('has expected default structure', async () => {
+ const wrapper = mount(NavText)
+
+ expect(wrapper.is('span')).toBe(true)
+ expect(wrapper.classes()).toContain('navbar-text')
+ expect(wrapper.classes().length).toBe(1)
+ expect(wrapper.text()).toEqual('')
+ })
+
+ it('renders custom root element when prop tag is set', async () => {
+ const wrapper = mount(NavText, {
+ propsData: {
+ tag: 'div'
+ }
+ })
+
+ expect(wrapper.is('div')).toBe(true)
+ expect(wrapper.classes()).toContain('navbar-text')
+ expect(wrapper.classes().length).toBe(1)
+ expect(wrapper.text()).toEqual('')
+ })
+
+ it('renders default slot content', async () => {
+ const wrapper = mount(NavText, {
+ slots: {
+ default: 'foobar'
+ }
+ })
+
+ expect(wrapper.is('span')).toBe(true)
+ expect(wrapper.classes()).toContain('navbar-text')
+ expect(wrapper.classes().length).toBe(1)
+ expect(wrapper.text()).toEqual('foobar')
+ })
+})
diff --git a/src/components/nav/nav.spec.js b/src/components/nav/nav.spec.js
index 247f78beab6..3858210cf60 100644
--- a/src/components/nav/nav.spec.js
+++ b/src/components/nav/nav.spec.js
@@ -1,6 +1,109 @@
-import { loadFixture, testVM } from '../../../tests/utils'
+import Nav from './nav'
+import { mount } from '@vue/test-utils'
describe('nav', () => {
- beforeEach(loadFixture(__dirname, 'nav'))
- testVM()
+ it('has expected default structure', async () => {
+ const wrapper = mount(Nav)
+
+ expect(wrapper.is('ul')).toBe(true)
+ expect(wrapper.classes()).toContain('nav')
+ expect(wrapper.classes().length).toBe(1)
+ expect(wrapper.text()).toBe('')
+ })
+
+ it('renders custom root element when prop tag set', async () => {
+ const wrapper = mount(Nav, {
+ propsData: {
+ tag: 'ol'
+ }
+ })
+
+ expect(wrapper.is('ol')).toBe(true)
+ expect(wrapper.classes()).toContain('nav')
+ expect(wrapper.classes().length).toBe(1)
+ expect(wrapper.text()).toBe('')
+ })
+
+ it('renders default slot content', async () => {
+ const wrapper = mount(Nav, {
+ slots: {
+ default: 'foobar'
+ }
+ })
+
+ expect(wrapper.is('ul')).toBe(true)
+ expect(wrapper.classes()).toContain('nav')
+ expect(wrapper.classes().length).toBe(1)
+ expect(wrapper.text()).toBe('foobar')
+ })
+
+ it('applies pill style', async () => {
+ const wrapper = mount(Nav, {
+ propsData: {
+ pills: true
+ }
+ })
+
+ expect(wrapper.is('ul')).toBe(true)
+ expect(wrapper.classes()).toContain('nav')
+ expect(wrapper.classes()).toContain('nav-pills')
+ expect(wrapper.classes().length).toBe(2)
+ expect(wrapper.text()).toBe('')
+ })
+
+ it('applies tab style', async () => {
+ const wrapper = mount(Nav, {
+ propsData: {
+ tabs: true
+ }
+ })
+
+ expect(wrapper.is('ul')).toBe(true)
+ expect(wrapper.classes()).toContain('nav')
+ expect(wrapper.classes()).toContain('nav-tabs')
+ expect(wrapper.classes().length).toBe(2)
+ expect(wrapper.text()).toBe('')
+ })
+
+ it('applies flex-column style when vertical', async () => {
+ const wrapper = mount(Nav, {
+ propsData: {
+ vertical: true
+ }
+ })
+
+ expect(wrapper.is('ul')).toBe(true)
+ expect(wrapper.classes()).toContain('nav')
+ expect(wrapper.classes()).toContain('flex-column')
+ expect(wrapper.classes().length).toBe(2)
+ expect(wrapper.text()).toBe('')
+ })
+
+ it('applies justify style when justified', async () => {
+ const wrapper = mount(Nav, {
+ propsData: {
+ justified: true
+ }
+ })
+
+ expect(wrapper.is('ul')).toBe(true)
+ expect(wrapper.classes()).toContain('nav')
+ expect(wrapper.classes()).toContain('nav-justified')
+ expect(wrapper.classes().length).toBe(2)
+ expect(wrapper.text()).toBe('')
+ })
+
+ it('applies fill style style when fill set', async () => {
+ const wrapper = mount(Nav, {
+ propsData: {
+ fill: true
+ }
+ })
+
+ expect(wrapper.is('ul')).toBe(true)
+ expect(wrapper.classes()).toContain('nav')
+ expect(wrapper.classes()).toContain('nav-fill')
+ expect(wrapper.classes().length).toBe(2)
+ expect(wrapper.text()).toBe('')
+ })
})