2017-01-09 7 views
0

Предполагается, что x - это внешняя библиотека, а Thing - объект, который может быть построен от x. Это все, завернутые в угловом службы, например, так:Mocking/шпионаж на конструкторе «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'); 

Но он все еще жалуется, что x() method does not exist на той линии, которая Thing должна быть построена

ответ

-1

Ваши попытки

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

is wr Онг:

spyOn() заменяет методы шпионами, так как 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

Но это, кажется, не разрешить использование 'x' в коде, который проходит тестирование (' createThing' метод обслуживания). Когда я добавляю свой код в тест, я получаю 'ReferenceError: не могу найти переменную: x', когда я запускаю тест. –

+0

Я предположил, что вы хотите шпионить« вещь ». Если вы хотите заменить целое 'x', вы можете перейти на один уровень вверх и запомнить' x' и заменить 'window.x' (в случае, если' x' действительно является глобальным). Если 'x' не является глобальным, просим пояснить ваш пример. Указанная вами ошибка указывает на это. –

Смежные вопросы