Cómo burlarse de la historia. Estado para escribir pruebas de unidad en angular -- angular campo con unit-testing campo con karma-jasmine camp Relacionados El problema

How to Mock History.state for writing unit tests in angular


5
vote

problema

Español

Estoy escribiendo pruebas de unidad para mi componente, pero teniendo problemas para crear la instancia del componente y mostrar un error siguiente,

  TypeError: Cannot read property 'patientId' of null     

He intentado burlarse de todos los proveedores, incluido el enrutador y el enrutador activo Mi componente.ts es

  export class PatientInsurancePlanSearchComponent implements OnInit {    private patientId: number = -1;   public selectedOrganizationInsurance: OrganizationInsurance;   public organizationInsurancePlans$: Observable<OrganizationInsurancePlan[]>;    constructor(     private router: Router,     private activatedRoute: ActivatedRoute,     private biilingHttpService: BillingHttpService   ) {     this.selectedOrganizationInsurance = new OrganizationInsurance();   }    ngOnInit() {     this.patientId = history.state.patientId as number;     this.selectedOrganizationInsurance = history.state.selectedOrganizationInsurance as OrganizationInsurance;     this.organizationInsurancePlans$ = this.biilingHttpService.getOrganizationInsurancePlans(this.selectedOrganizationInsurance.id);   }   

espec.ts

  interceptor.Result.Where(classa = classa.Id < 2) 0  

Guíame amablemente qué me estoy perdiendo.

Original en ingles

I am writing unit tests for my component but having trouble in creating the instance of the component and showing following error,

TypeError: Cannot read property 'patientId' of nullxc2xa0  

I have tried mocking all the providers including router and active router My component.ts is

export class PatientInsurancePlanSearchComponent implements OnInit {    private patientId: number = -1;   public selectedOrganizationInsurance: OrganizationInsurance;   public organizationInsurancePlans$: Observable<OrganizationInsurancePlan[]>;    constructor(     private router: Router,     private activatedRoute: ActivatedRoute,     private biilingHttpService: BillingHttpService   ) {     this.selectedOrganizationInsurance = new OrganizationInsurance();   }    ngOnInit() {     this.patientId = history.state.patientId as number;     this.selectedOrganizationInsurance = history.state.selectedOrganizationInsurance as OrganizationInsurance;     this.organizationInsurancePlans$ = this.biilingHttpService.getOrganizationInsurancePlans(this.selectedOrganizationInsurance.id);   } 

spec.ts

class FakeInsurancePlanSearchComponent {   @Input() public organizationInsurancePlans: OrganizationInsurancePlan[] = [];   @Input() public selectedOrganizationInsurance: OrganizationInsurance;   }   beforeEach(async(() => {     TestBed.configureTestingModule({       declarations: [ PatientInsurancePlanSearchComponent       , FakeInsurancePlanSearchComponent ],       imports: [         StoreModule.forRoot({}),         HttpClientModule,         RouterTestingModule,       ],       providers: [         Store,         {           provide: ActivatedRoute, useValue: {             state: of({ selectedorganizationInsurancePlan: 'AETNA'})         }       },       BillingHttpService       ]     })     .compileComponents();   }));    beforeEach(() => {     fixture = TestBed.createComponent(PatientInsurancePlanSearchComponent);     component = fixture.componentInstance;     fixture.detectChanges();   });    it('should create', () => {     expect(component).toBeTruthy();   }); 

Kindly guide me whats i am missing..

        

Lista de respuestas

6
 
vote

Si desea agregar paciente a la pila del historial de sesión de los navegadores, simplemente puede usar:

  history.pushState(state, title, url);   

En su caso, debería ser algo así:

  describe(MyComponent.name, () => {    ...     beforeEach(() => {        window.history.pushState({ patientId: 'somevalue'}, '', '');         ...    })      it('...', () => {     }) }   
 

If you want to add patientId to the browsers session history stack, you can simply use:

history.pushState(state, title, url); 

In your case it should be something like this:

describe(MyComponent.name, () => {    ...     beforeEach(() => {        window.history.pushState({ patientId: 'somevalue'}, '', '');         ...    })      it('...', () => {     }) } 
 
 
   
   
0
 
vote

respuesta simple:

Puede proporcionar al estado en:

  provideMockStore({ initialState: your_state })   

o

  UInt32 FCS_WRITE = FCS_FORCEWRITE; 0  

pero le sugiero que haga lo siguiente si tiene una tienda compleja:

  • Crear una clase en la que tendrá su estado de la tienda simulada: UInt32 FCS_WRITE = FCS_FORCEWRITE; 111111 .
  UInt32 FCS_WRITE = FCS_FORCEWRITE; 2  
  • Configure el estado en su tienda en la prueba:
  UInt32 FCS_WRITE = FCS_FORCEWRITE; 3  
 

Simple answer:

You can provide the state in :

provideMockStore({ initialState: your_state }) 

or

mockStore.setState(your_state ); 

BUT I suggest you do do the following if you have a complex store:

  • create a class where you will have your mock store state: MockStoreState.
 type RecursivePartial<T> = {   [P in keyof T]?:   T[P] extends (infer U)[] ? RecursivePartial<U>[] :     T[P] extends object ? RecursivePartial<T[P]> :       T[P]; };  export class MockStoreState {   private store_a: RecursivePartial<Store_A>;   private store_b: RecursivePartial<Store_b>;    build(): any {     const defaultStore_a = {       ...     };     const defaultStore_b = {       ...     };      return {       store_a: { ...defaultStore_a , ...this.store_a},       store_b: { ...defaultStore_b , ...this.store_b },     };   }    setStore_a(value: RecursivePartial<Store_A>): Store_A_State {     this.store_a= value;     return this;   }    setStore_b(value: RecursivePartial<DatasourceState>): Store_B_State {     this.store_b= value;     return this;   } } 
  • Set the state in your store in the test:
describe(MyComponent.name, () => {    ...    let mockStore: MockStore<any>;     beforeEach(() => {        ...        mockStore = TestBed.get(Store);    })      it('...', () => {      const state = new MockStoreState().setStore_a({...})     .build();      mockStore.setState(state);     // HERE you have set the data in your store.    }) } 
 
 

Relacionados problema

1  Problema de pruebas de karma + jazmín cuando el fusible la aplicación angular inyecta el módulo  ( Karmajasmine testing issue when fuse angular app injects module ) 
y Configurar una prueba de karma + jazmín en mi aplicación de fusible (dentro de Dentfixels [DOT] COM / TEMAS / FUSE), según AngularJS + Gulp Project, con los...

0  La configuración de Karma no ve los archivos .ts  ( Karma setup dont see the ts files ) 
Tengo un gran proyecto antiguo en Angular2, que no empecé, y ahora necesito agregar pruebas allí. Configuré al jazmín y el karma, pero, desafortunadamente, cu...

1  JASMINE: ¿Cómo los mensajes de excepción de prueba dentro de un componente?  ( Jasmine how test exception messages within a component ) 
Para mis pruebas de unidad, estoy asegurando de que mis componentes estén llamando los métodos adecuados, y luego comportándose adecuadamente si lo hacen. El ...

0  Mock observable servicio en ngoninit  ( Mock observable service on ngoninit ) 
PS Esto es la primera vez que escribiré casos de prueba. detalles envasados: - Angular 4.4.3 en componente currentToken: string; constructor(privat...

5  ¿Hay alguna manera de procesar las pruebas de la unidad angular de karma en lotes?  ( Is there a way to process karma angular unit tests in batches ) 
Nos enfrentamos a un problema en el que nuestras pruebas comenzarán a fallar o correr extremadamente lento después de un cierto punto. He visto artículos en l...

11  En Jasmine, Array. Lascludes no funcionan (deben ser reemplazadas por otras funciones). ¿Por qué?  ( In jasmine array includes does not work must be replaced by other functions ) 
Mi problema parece muy extraño. Tengo un constructor con una función nueva y muy simple, que debe verificar si una variable está contenida en una matriz. Func...

0  ¿Cómo puedo escribir el resultado de las pruebas de la unidad de Karma a un archivo?  ( How can i write the outcome of karma unit tests to a file ) 
Tengo mi configuración de archivo karma.config con el karma-espec-reportero que imprime correctamente el resultado de todas las pruebas de la unidad a la cons...

1  Burlándose de un servicio dependiente a una prueba de unidades de controlador en angularjs  ( Mocking a dependent service to a controller unit test in angularjs ) 
Tengo un problema cuando la unidad probó una aplicación iónica. He visto preguntas similares, pero ninguna resolví mi problema. Básicamente, este es mi con...

1  Cómo obtener texto de alerta de bootstrap cuando el usuario login  ( How to get bootstrap alert text when user login ) 
Soy nuevo en Protractor y ahora mi pregunta es cómo obtener el texto del mensaje de alerta de arranque cuando se inicia sesión. Elemento de mensajes de alerta...

0  TypeError: indefinido no es un objeto (evaluando 'screen.orientation.lock')  ( Typeerror undefined is not an object evaluating screen orientation lock ) 
Estoy probando la prueba de la unidad en el generador M. Inyecté $ alcance en el archivo de especificación de prueba, pero estoy enfrentando a este error cómo...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos