2016-01-12 2 views
1

У меня есть завод с геттер и сеттермодульного тестирования Фабрики Jasmine-Sinon

.factory('myService', function() { 
    var car = null; 
    return { 
    car: car, 
    get: function get() { 
     return car; 
    }, 
    set: function set(newCar) { 
     car = newCar; 
    } 
    }; 
}); 

Я пишу тест для этого, но я не могу назвать метод set и он на самом деле установить car в newCar

myService.set = sinon.spy(); 
myService.get = sinon.spy() 

it('should set car to new car', function() { 
    var newCar = ['a','b','c']; 
    expect(myService.car).toEqual(null); //pass 

    myService.set(newCar); 

    dump(myService.car); //null 

    expect(myService.set).toHaveBeenCalledWith(newCar);//pass 

    expect(myService.get).toHaveReturned(newCar);//fail 

}); 

Любые советы о том, что я делаю неправильно здесь?

ответ

1

Здесь больше проблем.

Первый заключается в том, что свойство .car всегда будет иметь значение null.

var car = null; 
return { 
    car: car, 
    get: function get() { 
    return car; 
    }, 
    set: function set(newCar) { 
    car = newCar; 
    } 
}; 

Здесь вы инициализируете его car, который является нулевым. Между ними не будет никакой ссылки. Это всегда будет нулевым, так как вы никогда не изменить это свойство на объекте:

dump(myService.car); //null 

Вы могли бы сделать что-то вроде:

return { 
    car: null, 
    get: function get() { 
    return this.car; 
    }, 
    set: function set(newCar) { 
    this.car = newCar; 
    } 
}; 

Но с этим вы можете столкнуться с некоторыми this вопросов контекстных позже. Почему вы пытаетесь выявить car, если у вас есть геттер?

Другое дело в том, что вы замените весь get и set функции с этим:

myService.set = sinon.spy(); 
myService.get = sinon.spy(); 

Sinon ничего не знает о своем первоначальном get и set.

Вы должны сделать это так: sinon.spy(myService, 'set');

Так Sinon может обернуть вашу функцию с шпионом, сохраняя его изначальное поведение. Check Sinon documentation

+0

спасибо! Я не устанавливал свой шпион правильно, не понимал разъединения. – tester123

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