2017-01-09 2 views
0

とすると、xは外部ライブラリであり、Thingxから構築できるオブジェクトです。コンストラクタ "x.Thing()"の盗難/スパイ

app.service('thingService', function() { 
    var thing; 

    this.createThing = function(thingParam){ 
     thing = new x.Thing(thingParam); 
    } 
}); 

私の最初の試みは、この付属:これはすべてのようにのように、角度のサービスに包まれ

xSpy = jasmine.createSpyObj('x', ['Thing']); 
spyOn(window, 'x').andReturn('xSpy'); 

をしかし、それはまだ文句Thingを構築する必要があり、そのライン上のx() method does not existその

答えて

-1

あなたの試み

xSpy = jasmine.createSpyObj('x', ['Thing']); 
spyOn(window, 'x').andReturn('xSpy'); 

はwrですxが目的であるため、の方法の代わりにスパイを置き換えたものです。このため、例外x() method does not existが発生します。

あなただけの属性置き換えることができ、あなたの例を想定すると:

describe("Test", function() { 
    var origThing; 

    beforeEach(function() { 
     // create spy object for Thing that provides its methods 
     var mockedThingInterface = jasmine.createSpyObj('Thing', ['methodA', 'methodB']); 

     mockedThingInterface.methodA.and.returnValue(1); 
     mockedThingInterface.methodB.and.returnValue(2); 

     // remember original constructor 
     origThing = x.Thing; 

     // replace the constructor 
     x.Thing = function() { 
      return mockedThingInterface; 
     } 
    }); 

    afterEach(function() { 
     // restore when finished 
     x.Thing = origThing; 
    }); 

    it("should ...", function() { 
     // ... 
    }); 
}); 
+0

をしかし、これはテストされていたコード(サービスの 'createThing'法)におけるX ''の使用を解決していないようです。テストにコードを追加すると、 'ReferenceError:変数を見つけることができません:x'テストを実行します。 –

+0

' thing'だけをスパイすると仮定しました。 'x'全体を置き換えたい場合は、1つ上のレベルに移動して' x'を覚えて 'window.x'を置き換えてください(' x'は本当にグローバルです)。 'x'がグローバルでない場合、あなたの例を明確にしてください。あなたが指摘したエラーはこれを指しています。 –

関連する問題