Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单元测试受保护方法或属性的最佳方式_Javascript_Angular_Unit Testing_Karma Jasmine - Fatal编程技术网

Javascript 单元测试受保护方法或属性的最佳方式

Javascript 单元测试受保护方法或属性的最佳方式,javascript,angular,unit-testing,karma-jasmine,Javascript,Angular,Unit Testing,Karma Jasmine,我是单元测试新手,我有一个服务,它有一个抽象方法来设置基类配置。但我有点困惑,因为这些财产是受保护的。最好的测试方法是什么?我应该嘲笑它还是公开它 import { NavigationEnd } from '@angular/router'; import { Inject } from '@angular/core'; interface IConfig { path: string; pageTitle: string; fields: { [key: string]: st

我是单元测试新手,我有一个服务,它有一个抽象方法来设置基类配置。但我有点困惑,因为这些财产是受保护的。最好的测试方法是什么?我应该嘲笑它还是公开它

import { NavigationEnd } from '@angular/router';
import { Inject } from '@angular/core';

interface IConfig {
  path: string;
  pageTitle: string;
  fields: { [key: string]: string };
}

const CONFIGS: IConfig[] = [
  {
    path: '/create-account',
    pageTitle: 'CreateAccount',
    fields: {
      name: 'name',
      pin: 'pin',
      mobilePhoneNumber: 'mobilePhoneNumber',
      mediasource: 'mediasource',
    },
  },
  {
    path: '/application-form/user-data',
    pageTitle: 'UserData',
    fields: {
      birthProvinceId: 'birthProvinceId',
      birthCityId: 'birthCityId',
      birthDate: 'birthDate',
      birthMonth: 'birthMonth',
      birthYear: 'birthYear',
      gender: 'gender',
    },
  },
];

abstract class A {
  protected selectedConfig: IConfig;

  constructor(
    @Inject(CONFIGS)
    protected configs: IConfig[],
  ) {}

  protected abstract setConfig(event): void;
}

@Injectable()
class B extends A {
  setConfig(event: NavigationEnd) {
    this.selectedConfig = this.configs.find(
      (route: IConfig) => route.path === event.url,
    );
  }
}