2016-09-01 12 views
1

背景

I持っているクラスBから拡張するクラスAモカJS - モック親クラスモジュール

A = class A 
    ... 
    my_inner_func: (param1) => 
     return new MyHelper() 

B = class B extends A 
    ... 

は私が何をしたいのか?

unittestでmy_inner_func()MyMockHelper()を返す必要があります。私は

a = rewire './a.coffee' 
b = rewire './b.coffee' 

a.__set__ 
    MyHelper: MyMockHelper 

b.__set__ 
    A: a.A 

しかしB().my_inner_func()リターンMyHelperの代わりMyMockHelperを試してみた何

私の質問

どのように1つのモックのCoffeeScript(またはJavaScript)に拡張されたクラスで使用されるモジュール?

答えて

2

rewireのドキュメントでは、クラスインスタンス変数について何も言及していません。私は、実際には、テスト対象のモジュールのグローバルまたはトップレベルの範囲を「再配線」するためだと思います。

また、再配線の数はlimitationsです。その中で、constやbabelのサポートはifyと思われるので、おそらくネイティブの解決策を試してみてください。

基本的なレベルでは、モックは、単に上書きまたは交換方法を、オブジェクトのプロトタイプに、ので、このような何かがモカは次のようになります使用してテストケース

// super class 
class Polygon { 
    constructor(height, width) { 
    this.height = height; 
    this.width = width; 
    } 

    get area() { 
    return this.calcArea(); 
    } 

    calcArea() { 
    return this.height * this.width; 
    } 
} 
// superclass instance 
const rect = new Polygon(10, 2); 
console.log('rect', rect.area); // 20 

// subclass 
class Square extends Polygon { 
    constructor(side) { 
    super(side, side) 
    } 
} 

// subclass instance 
const square = new Square(2); 
console.log('square', square.area); // 4 

// mocked calcArea of subclass 
square.calcArea = function() { 
    return 0; 
}; 

// result from new mocked calcArea 
console.log('mocked', square.area); // 0 

に動作するはずです...

import Square from './Square'; 

describe('mocks',() => { 

    it('should mock calcArea',() => { 

     const square = new Square(2); 

     square.calcArea = function() { 
      return 0; 
     }; 

     expect(square.area).to.equal(0); 
    }); 

}); 

はここ

で遊ぶために code penです
関連する問題