createSpyObj
используется для создания шпионов на методах.Вы можете использовать его для getUser
метод UserService
.
userChanged
- это просто свойство класса.Для этого вам не нужен шпион.
Что вы можете сделать, это просто создать фиктивный объект, который возвращает субъект:
const userChanged = new Subject();
providers: [
...
{provide: UserService, useValue: { userChanged }}
],
{ userChanged }
равно { userChanged: userChanged }
Затем в вашем блоке beforeEach
вы создадите новый пользовательский экземпляр:
//...
beforeEach(() => {
const myUser = new User(...)
userChanged.next(myUser)
})
Я рекомендую сделать это в блоке beforeEach
, чтобы избежать побочных эффектов.между различными спецификациями.
providers: [
...
{provide: UserService, useValue: { userChanged: of({id: 1}) }}
],
Другой способ сделать то же самое - просто создать наблюдаемое с использованием метода of
так же, как вы делаете это в своем примере.
Если вы действительно хотите шпионить за методом subscribe
, вы можете создать для него шпион:
spyOn(userChanged, 'subscribe')
Если вы хотите смешать spyObject
со свойствами,Вы можете использовать спред оператора:
const spyObj = {
... jasmine.createSpyObj('MyObject', ['spyMethod']),
myProperty: true,
};
spyObj.spyMethod();
expect(spyObj.spyMethod).toHaveBeenCalled();
expect(spyObj.myProperty).toBeTrue();