2017-10-20 8 views
3

ユニットスクリプト(TypeScriptおよびvue-class-componentで記述)のユニットテスト時にSinonを使用してAPIコールをスタブしています。単位テストにスタブを追加した後、元のメソッドはまだ呼び出されています(スタブされた値を返さない)。Vue.JSユニットテスト - sinon.stub()を使用しても元のメソッドがまだ呼び出されています。

it('should set the text to bar', async() => { 

    const stubbedApiResponse =() => { 
    return 'bar'; 
    }; 

    sinon.stub(MyComponent.prototype, 'getFoo').callsFake(stubbedApiResponse); 

    let options = { 
    template: '<div><my-component></my-component></div>', 
    components: {'my-component': MyComponent}, 
    store: this.store 
    }; 
    this.vm = new Vue(options).$mount(); 

    Vue.nextTick(() => { 
    expect(this.vm.$el.querySelector('.text').textContent).toBe('bar'); // Still equals 'foo' 
    }); 
}); 

私はコンポーネントでmountedに呼び出されたスタブしようとすると、テキストの内容を設定しています方法。どんな助けもありがとう、ありがとう!で

sinon.stub(MyComponent.options.methods, 'getFoo').callsFake(stubbedApiResponse) 

+0

デバッグのための分のgitリポジトリを提供することはできますか? –

答えて

1

問題は、メソッドをスタブにし、そう、vue-class-componentでエクスポートクラスのoptionsプロパティ内部ライブmethodsを活字体のクラスを使用しているとき、あなたはこのようにそれをしなければならない、ということでしたテストがその変更を行うことに合格した場合は、以下のすべてを無視してください。


私はコード内の無関係な問題のカップルを参照してください。

  • PhantomJSを使用している場合Vue.nextClickはとにかくPromisesを使用しないので、その後、asyncを使用してにはポイントがありません。それはモカが提供するdone機能を使用するように簡単です:

    it('...', (done) => { 
        // ... 
        Vue.nextTick(() => { 
        // ... 
        done() 
        } 
    } 
    
  • チャイのbeがチェーンであると平等のためにテストするものではありません。 equalを使用する必要があります(例:expect(foo).to.equal('bar'))。

  • それは代わりに、参照頭痛を回避するために、プロパティの変数としてvmを残す方が良いでしょう:

    const vm = //... 
    nextTick(() => { expect(vm.$el)//... } 
    
+0

私はこれを(タグの他に)最初の投稿で述べたはずですが、TypescriptとVueクラスのコンポーネントデコレータを使用しているので、メソッドは 'methods'の中にありません。それらはクラスのインスタンスメソッドです。 – cfly24

+0

アカウントタイプスクリプトクラスを使用して、答えが更新されました。 –

関連する問題