Skip to content

Commit ec07f85

Browse files
committed
test: add a few more unit tests
1 parent 0095ea4 commit ec07f85

File tree

2 files changed

+36
-22
lines changed

2 files changed

+36
-22
lines changed

src/components/VueImageKit.vue

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<template>
22
<div class="vue-image-kit">
3-
<div v-if="dataUrl" :style="{ backgroundColor }" class="vue-image-kit__placeholder">
4-
<img :src="placeholder || dataUrl" alt="Placeholder" :style="{ width: `${width}px`, height: `${height}px` }">
3+
<div v-if="dataUrl" class="vue-image-kit__placeholder" :style="{ backgroundColor }">
4+
<img :src="placeholder || dataUrl" alt="Placeholder" :style="{ width: `${width}px`, height: `${height}px` }"/>
55
</div>
6-
<img :srcset="getSrcset" :sizes="getSizes" :src="getSrc" :alt="alt" :style="{ width: `${width}px`, height: `${height}px` }" class="vue-image-kit__img"/>
6+
<img class="vue-image-kit__img" :srcset="getSrcset" :sizes="getSizes" :src="getSrc" :alt="alt" :style="{ width: `${width}px`, height: `${height}px` }"/>
77
</div>
88
</template>
99

@@ -77,35 +77,37 @@ export default {
7777
},
7878
getSrc () {
7979
const { showCanvas, dataUrl, imageKitPrefix, hash, src } = this
80+
8081
return showCanvas
8182
? dataUrl
8283
: `${imageKitPrefix}/${hash}/${src}`
8384
},
8485
getSrcset () {
85-
return this.srcset
86-
.map(size => `${this.imageKitPrefix}/${this.hash}/tr:w-${size}${this.customTransform ? ',' + this.customTransform : ''}/${this.src} ${size}w`)
86+
const { srcset, imageKitPrefix, hash, customTransform, src } = this
87+
88+
return srcset
89+
.map(size => `${imageKitPrefix}/${hash}/tr:w-${size}${customTransform ? ',' + customTransform : ''}/${src} ${size}w`)
8790
.join(', ')
8891
},
8992
getSizes () {
90-
let sizes = ''
91-
if (this.sizes && this.sizes.length && (this.sizes.length === this.srcset.length)) {
92-
sizes = this.srcset.map((size, idx) => `(max-width: ${size}px) ${this.sizes[idx]}px`).join(', ')
93+
const { sizes, srcset, defaultSize } = this
94+
let sizesString = ''
95+
if (sizes && sizes.length && (sizes.length === srcset.length)) {
96+
sizesString = srcset.map((size, idx) => `(max-width: ${size}px) ${sizes[idx]}px`).join(', ')
9397
}
9498
95-
sizes = this.srcset.map(size => `(max-width: ${size}px) ${parseInt(size, 10) - 40}px`).join(', ')
96-
sizes += ` ${this.defaultSize}px`
99+
sizesString = srcset.map(size => `(max-width: ${size}px) ${parseInt(size, 10) - 40}px`).join(', ')
100+
sizesString += ` ${defaultSize}px`
97101
98-
return sizes
102+
return sizesString
99103
}
100104
},
101105
mounted () {
102106
this.showCanvas = true
103-
104107
this.observer = new IntersectionObserver(([entry]) => {
105108
this.triggerIntersection(entry)
106109
})
107110
this.observer.observe(this.$el)
108-
109111
this.$once('hook:beforeDestroy', () => {
110112
this.observer.disconnect()
111113
@@ -116,27 +118,29 @@ export default {
116118
},
117119
methods: {
118120
triggerIntersection(entry = {}) {
119-
const img = this.$el.querySelector('.vue-image-kit__img')
120-
const placeholder = this.$el.querySelector('.vue-image-kit__placeholder')
121+
const { $el, timeOut, srcset, getSrcset, imageKitPrefix, hash, src } = this
122+
const img = $el.querySelector('.vue-image-kit__img')
123+
const placeholder = $el.querySelector('.vue-image-kit__placeholder')
121124
122125
img.onload = function () {
123126
delete img.onload
124-
this.$el.classList.add('vue-image-kit--loaded')
127+
$el.classList.add('vue-image-kit--loaded')
125128
126129
if (placeholder) {
127-
this.timeOut = setTimeout(() => {
130+
timeOut = setTimeout(() => {
128131
placeholder.remove()
129132
}, 300)
130133
}
131134
}
135+
132136
if (entry.isIntersecting) {
133137
this.showCanvas = false
134138
135-
if (this.srcset) {
136-
img.srcset = this.getSrcset
139+
if (srcset) {
140+
img.srcset = getSrcset
137141
}
138142
139-
img.src = `${this.imageKitPrefix}/${this.hash}/${this.src}`
143+
img.src = `${imageKitPrefix}/${hash}/${src}`
140144
this.observer.disconnect()
141145
}
142146
}

tests/unit/vue-image-kit.spec.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ function setupIntersectionObserverMock({
2323
)
2424
}
2525

26+
function waitForImageToLoad(imageElement) {
27+
return new Promise(resolve => { imageElement.onload = resolve })
28+
}
29+
2630
describe('When I create the VueImageKit component', () => {
2731
const item = { hash: '6xhf1gnexgdgk', src: 'lion_BllLvaqVn.jpg' }
2832

@@ -173,7 +177,8 @@ describe('When I create the VueImageKit component', () => {
173177
}, 500)
174178
})
175179

176-
it('should set the src and srcset methods', (done) => {
180+
it('should trigger intersection', (done) => {
181+
// ! WIP
177182
const localVue = createLocalVue()
178183
const wrapper = mount(VueImageKit, {
179184
propsData: { ...item, width: 300, height: 300, placeholder: 'https://ik.imagekit.io/6xhf1gnexgdgk/igor2_HJhiHMa54.png' },
@@ -183,7 +188,6 @@ describe('When I create the VueImageKit component', () => {
183188
}
184189
})
185190
wrapper.vm.observer.disconnect = jest.fn()
186-
wrapper.vm.observer.disconnect = jest.fn()
187191
expect(wrapper.exists()).toBe(true)
188192
wrapper.vm.triggerIntersection({ isIntersecting: true })
189193
expect(wrapper.vm.timeOut).toBeNull()
@@ -192,10 +196,16 @@ describe('When I create the VueImageKit component', () => {
192196
expect(img.exists()).toBe(true)
193197
const placeholder = wrapper.find('.vue-image-kit__placeholder')
194198
expect(placeholder.exists()).toBe(true)
199+
expect(wrapper.vm.$el.querySelector('.vue-image-kit__placeholder')).toBeDefined()
195200
setTimeout(() => {
201+
const imgQuerySelector = wrapper.vm.$el.querySelector('.vue-image-kit__img')
202+
waitForImageToLoad(imgQuerySelector)
203+
// expect(imgQuerySelector.classList).toContainEqual(['vue-image-kit--loaded'])
196204
const placeholderAgain = wrapper.find('.vue-image-kit__placeholder')
197205
expect(placeholderAgain.exists()).toBe(false)
198206
expect(wrapper.vm.timeOut).toBeNull()
207+
expect(wrapper.vm.$el.querySelector('.vue-image-kit__placeholder')).toBeNull()
208+
// expect(wrapper.vm.$el.querySelector('.vue-image-kit__img').onload).toHaveBeenCalled()
199209
done()
200210
}, 301)
201211
})

0 commit comments

Comments
 (0)