1
私はvuejs2プロジェクトでユニットテストにJestを使用していますが、私のコンポーネントにインポートされたライブラリhowler.jsを嘲笑してしまいました。jestを使用するときにモジュールをモックする方法
は、私は、私はそのテストファイルがPlayer.spec.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>
という名前のコンポーネントを持っていると仮定します。テストコードは、hereという回答に基づいて書かれましたが、called
がtrueに設定されていないため、テストに失敗しました。このテストを実行するときには、疑似コンストラクタは呼び出されないようです。
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を使用していますが、私は冗談のmock
APIの使用方法に関連するより一般的な質問と、それを検討したが、私はさらに取得することはできませんよ。
を用いて試験することができる再生機能上のスパイでモジュールを模擬する方法がある。このソリューションは、私には有望なようだが、私は、 'TypeError例外を得た:_howler.Howl.mockImplementationはfunction'ではありません.. – choasia
Mhmm、 'Howl'をログに記録するとどうなるのですか –
' [Function:Howl] ' – choasia