如何在角度中单元测试行为科目



我想测试获取和设置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)
  })
}))

最新更新