Как проверить ActivatedRoute - PullRequest
       12

Как проверить ActivatedRoute

0 голосов
/ 17 октября 2018

Я довольно новичок в Angular.Я пытаюсь увеличить покрытие кода и, похоже, не могу получить значения 'username' через this.route.snapshot.paramMap .вот мой классКогда я запускаю тесты, я получаю сообщение Значение имени пользователя требуется даже после того, как я установил component.username = 'test@example.com';Пожалуйста, помогите

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { Constants } from '../../app.constants';
import { AuthService } from '../../services/auth/auth.service';
import { AlertService } from '../../services/alert/alert.service';
import * as _ from 'underscore';

@Component({
  selector: 'app-activate',
  templateUrl: './activate.component.html',
  styleUrls: ['./activate.component.scss']
})
export class ActivateComponent implements OnInit {

  status: string;
  error: string;
  username: string;
  token: string;

  constructor(private route: ActivatedRoute, private authService: AuthService, private alertService: AlertService) { }

  activate() {

    this.username = this.route.snapshot.paramMap.get('username');
    this.token = this.route.snapshot.paramMap.get('token');

 if (_.isEmpty(this.username)) {
  this.error = 'A username value is required '
} else if (_.isEmpty(this.token)) {
  this.error = 'A token value is required '
}
}
ngOnInit() {
this.activate();

}

и вот мой тест

fdescribe('ActivateComponent', () => {
let component: ActivateComponent;
let fixture: ComponentFixture<ActivateComponent>;

beforeEach(async(() => {
TestBed.configureTestingModule({
  declarations: [ ActivateComponent ],
  imports: [ RouterModule, RouterTestingModule, HttpClientTestingModule, MatDialogModule ],
  providers: [ AuthService, AlertService, ActivatedRouteMock,]
})
.compileComponents();
}));

beforeEach(() => {
fixture = TestBed.createComponent(ActivateComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});

it('should check if username and token have been filled out', () => {
component.username = 'test@example.com';
component.token = '12345';
console.log(component.username);
// expect(component).toBeTruthy();
});
});

1 Ответ

0 голосов
/ 17 октября 2018

Решено, нужно добавить в провайдеры следующее:

   beforeEach(async(() => {
   TestBed.configureTestingModule({
   declarations: [ ActivateComponent ],
   imports: [ RouterModule, RouterTestingModule, HttpClientTestingModule, 
    MatDialogModule ],
   providers: [ AuthService, AlertService , ActivatedRouteMock,
    {
      provide: ActivatedRoute,
      useValue: {
        snapshot: {
          paramMap: convertToParamMap({
            username: 'test@example.com',
            token: '23435'
          })
        }
      }
    }]
  })
  .compileComponents();
  }));

   beforeEach(() => {
  fixture = TestBed.createComponent(ActivateComponent);
   component = fixture.componentInstance;
  fixture.detectChanges();
    });

  it('should check if username and token have been filled out', () => {
 // component.username = 'test@example.com';
 // component.token = '12345';
 // TestBed.get(ActivatedRoute);
 console.log(component.username);
 console.log(component.token);
 // expect(component).toBeTruthy();
 });
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...