【问题标题】:How unit-test declarative approach in angular如何在 Angular 中进行单元测试声明性方法
【发布时间】:2021-01-06 21:38:09
【问题描述】:

这是我的问题,我想找到一种方法对此代码进行单元测试并检查连接的用户是否是我的特定客户端?如图所示,我有 2 个服务层 UserService 和 UserClient:

    export class UserClient {
  
    getConnectedUser(): Observable<User> {
        return this.http.get<User>(URL + '/me').pipe(shareReplay(1));
  }




 export class UserService {

  public connectedUser$: Observable<User> = this.userClient.getConnectedUser();
  constructor(private userClient: UserClient) {
  }

  isSpecificClient(): Observable<boolean> {
    return this.connectedUser$.pipe(
      map(user => user.authorities
                           .find(authorized => authorized.authority === Autorite.CLIENT) != null
      )
    );
  }

【问题讨论】:

    标签: angular unit-testing rxjs jasmine observable


    【解决方案1】:

    Angular 官方文档提供了guideline for testing HTTP requests

    如果你只关注UserService,另一种选择是监视UserClient

    import { of } from 'rxjs';
    
    let userClient: UserClient;
    let userService: UserService;
    
    // TestBed.configureTestingModule is omitted...
    
    beforeEach(() => {
      userClient = TestBed.inject(UserClient);
      userService = TestBed.inject(UserService);
    });
    
    it ('should do something...', () => {
    
      spyOn(userClient, 'getConnectedUser').and.returnValue(of(new User(...));
      
      userService.isSpecificClient().subscribe(value => {
        
        expect(value).toBeFalsy(); // your expectation goes here...
      });
    });
    

    【讨论】:

    • 我认为这里缺少的是嘲笑 connectedUser$
    猜你喜欢
    • 2021-10-07
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多