我想测试获取和设置my user.store.ts
的方法。我有一个用于获取users
get()
,addUsers()
用于将用户添加到BehaviourSubject
中。我怎样才能做到这一点?
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { User } from 'ngx-login-client';
@Injectable({
providedIn: 'root'
})
export class UserStore {
private _users: BehaviorSubject<User[]> = new BehaviorSubject([]);
get users() {
return this._users.asObservable();
}
addUsers(users: User[]) {
this._users.next(users);
}
}
我希望输出是在调用addUsers()
时添加的值,并且可以在我调用get users()
时get
用户。我是角度测试的新手。
收到如下错误:
Expected Observable({ _isScalar: false, source: BehaviorSubject({ _isScalar: false, observers: [ ], closed: false, isStopped: false, hasError: false, thrownError: null, _value: [ Object({ attributes: Object({ fullName: 'name', imageURL: '', username: 'myUser' }), id: 'userId', type: 'userType' }) ] }) }) to equal [ Object({ attributes: Object({ fullName: 'name', imageURL: '', username: 'myUser' }), id: 'userId', type: 'userType' }) ].
我的User[]
类型是:
{
'attributes': {
'fullName': 'name',
'imageURL': '',
'username': 'myUser'.
},
'id': 'userId',
'type': 'userType'
}
更新:我的用户.store.spec.ts文件。
import { TestBed, async } from '@angular/core/testing';
import { UserStore } from './user.store';
import { BehaviorSubject } from 'rxjs';
import { User } from 'ngx-login-client';
describe('UsersStore', () => {
beforeEach(() => TestBed.configureTestingModule({}));
it('should be created', () => {
const store: UserStore = TestBed.get(UserStore);
expect(store).toBeTruthy();
});
it('should add Users', async(() => {
let store: UserStore;
store = TestBed.get(UserStore);
let user: User[];
const testUser: User[] = [{
'attributes': {
'fullName': 'name',
'imageURL': '',
'username': 'myUser'
},
'id': 'userId',
'type': 'userType'
}];
store.addUsers(testUser);
store.users.subscribe(users => {
expect(users).toBe(testUser);
});
}));
});`
就像错误所说的那样,给定的数据是可观察的,但你的测试用例是对象。
你必须这样写:
it('should get users', async(() => {
component.users.subscribe(users => {
fixture.detectChanges()
expect(users).toBe(testUsers)
})
}))