как проверить authService с жасмином? - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь выполнить юнит-тестирование моей страницы входа в систему, используя jasmine и karma, но у меня всегда возникает эта ошибка «Ошибка: Ожидается один соответствующий запрос по критериям« Соответствующий URL: https://beta-lp.biodymanager.com/fr/api/login_check », не найдено ни одного». когда я хочу убедиться, что метод login вызывает функцию post, которая вызывает 'https://beta-lp.biodymanager.com/fr/' + SERVICE_LOGIN

, это моя spe c file

describe('LoginPage', () => {
  let component: LoginPage;
  let fixture: ComponentFixture<LoginPage>;
  let loginBtn: HTMLButtonElement;
  let eye : HTMLIonIconElement;


  beforeEach(async(() => {

    TestBed.configureTestingModule({
      declarations: [ LoginPage ],
      schemas: [CUSTOM_ELEMENTS_SCHEMA],
      imports: [
        BrowserModule,
        FormsModule , 
        RouterModule.forRoot([]),
        RouterTestingModule.withRoutes([{ path: 'tabs/dashboard', component: LoginPage },{ path: 'tabs/home', component: LoginPage }]),
 ReactiveFormsModule,
        TranslateModule.forRoot(),
        IonicModule,
        IonicStorageModule.forRoot(),
        HttpClientTestingModule,


      ] ,
      providers : [LoginPage,InAppBrowser, HTTP, Device, Globalization, AngularDelegate, CommonService ,
      AuthService,ModalController,Network,RestApiService,{
        provide: APP_BASE_HREF,
        useValue: '/'
      }]
     })
    .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(LoginPage);
    component = fixture.componentInstance;
    loginBtn = fixture.debugElement.nativeElement.querySelector('ion-button'); 


  });

   it('should create', () => {
    expect(component).toBeTruthy();  
   });
 describe('login method', ()=> {

      const value : IUser =({
        email   : 'emnasouilem@gmail.com',
        password: 'Zeynep2020/' 
      });

      it('test manager validity from API ',inject( [AuthService, HttpTestingController],(service : AuthService,http : HttpTestingController)=> {      

 spyOn(service,'login').and.returnValue(Observable.of({email : 'emnasouilem@gmail.com' , password : 'Zeynep2020/'}));


       service.login(value).subscribe(result =>{

          expect(result).toBeDefined();
          expect(result).toEqual(value),
          console.log(result);
       });

       const req = http.expectOne("https://beta-lp.biodymanager.com/fr/api/login_check");
       expect(req.request.method).toEqual('POST');
       expect(req.request.body).toEqual(value);     

       req.flush({user: {email :'emnasouilem@gmail.com'}, token: 'xxx'});

это мой authservice

export class AuthService extends RestApiService {

  login(body) {
    return this.post(SERVICE_LOGIN, body, false, false);
  }

restApiService

export class RestApiService {
// constructor

post(url, data: any, withAuth?: boolean, withLang?: boolean): Observable<any> {

    if (typeof withAuth === 'undefined') {
      withAuth = true;
    }
    if (!withAuth) {
      this.clearAuthHeader();
    }
    return new Observable<any>((observer) => {
      this.setAuthorizationHeader().then((authorization) => {
        this.setLocale().then((language) => {
          let apiUrl = this.locale + url;
          if (!withLang) {
            apiUrl = url;
          }
          if (this.device.platform === 'Android' || this.device.platform === 'iOS') {
            this.globalization.getPreferredLanguage().then(res => {
              console.log('current language', res);
              const code = res.value.split('-')[0];
              if (this.locale === '') {
                this.locale = code;
              }

              if (withLang) {
                apiUrl = this.locale + url;
              }
              console.log('Post request - apiUrl:', apiUrl);
              const body = JSON.stringify(data);
              let host = '*';
              if (!withAuth) {
                host = '-';
              }
              this.http.post(appConfig.getBaseUrl() + apiUrl, body, this.http.getHeaders(host)).then((response) => {
                console.log('addNewMeasurement - response.data: ', response.data);
                observer.next(JSON.parse(response.data));
                observer.complete();
              }).catch((error) => {
                console.log('addNewMeasurement - error: ', error);
                observer.error(error);
                observer.complete();
              });
            }).catch(e => console.log(e));
          } else {
            if (!withAuth) {
              this.clearAuthHeader();
            }
            if (this.locale === '') {
              this.locale = 'en';
            }
            if (withLang) {
              apiUrl = this.locale + url;
            }

            const body = JSON.stringify(data);

            this.httpClient.post(appConfig.getBaseUrl() + apiUrl, body, { headers: new HttpHeaders(this.headers) }).subscribe((result) => {
              observer.next(result);
              observer.complete();
            }, (error) => {
              observer.error(error);
              observer.complete();
            });
          }
        });
      });
    });
  }

это файл appconfig, содержащий URL api

testBaseUrl: 'https://beta-lp.biodymanager.com/'         
 export const SERVICE_LOGIN: string = 'api/login_check';

am i делать что-то не так? заранее спасибо

1 Ответ

0 голосов
/ 29 апреля 2020

Попробуйте изменить

const req = http.expectOne("https://beta-lp.biodymanager.com/fr/api/login_check");

этим

 const req = httpMock
.expectOne(req => req.method === 'POST' && req.url === 'https://beta-lp.biodymanager.com/fr/api/login_check');

. Или вы можете проверить ожидаем перегрузки , есть много способов вызвать эту функцию

https://angular.io/api/common/http/testing/HttpTestingController#expectOne

В разделе hopeOne () нажмите ' 3 перегрузки '

...