【发布时间】:2018-01-26 18:14:03
【问题描述】:
我在 vuejs2 项目中使用 Jest 进行单元测试,但陷入了模拟 howler.js 的困境,这是一个在我的组件中导入的库。
假设我有一个名为Player.vue的组件
<template>
<div class="player">
<button class="player-button" @click="play">Player</button>
</div>
</template>
<script>
import { Howl } from 'howler';
export default {
name: 'audioplayer',
methods: {
play() {
console.log('player button clicked');
new Howl({
src: [ 'whatever.wav' ],
}).play();
}
}
}
</script>
然后我有一个名为Player.spec.js 的测试文件。测试代码是根据答案here 编写的,但由于called 未设置为真,因此测试失败。运行此测试时似乎不会调用模拟构造函数。
import Player from './Player';
import Vue from 'vue';
describe('Player', () => {
let called = false;
jest.mock('howler', () => ({
Howl({ src }) {
this.play = () => {
called = true;
console.log(`playing ${src[0]} now`);
};
},
}));
test('should work', () => {
const Constructor = Vue.extend(Player);
const vm = new Constructor().$mount();
vm.$el.querySelector('.player-button').click();
expect(called).toBeTruthy(); // => will fail
})
})
虽然我在这里使用的是 Vuejs,但我认为它是一个与 Jest 的 mock API 的使用相关的更普遍的问题,但我无法更进一步。
【问题讨论】:
标签: javascript unit-testing vue.js jestjs