Как ожидать ошибки при разборе аргументов?- Angular6, Жасмин - PullRequest
0 голосов
/ 05 декабря 2018

Я написал функцию с именем saveToken(token), которая принимает аргумент string и сохраняет его в локальном хранилище в angular6 .Я пишу тесты для него в jasmine и хочу, чтобы тестовый пример выдавал ошибку, когда либо не задано ни одного аргумента, либо токен находится в недопустимом формате.

Проблема в том, чточто, когда я запускаю тестовый пример, он останавливается еще до запуска тестового примера, потому что в функции нет аргументов (или недопустимых аргументов), поэтому он никогда не запускается.

Я хотел бы знать, есть ли другой подход, который я мог бы попробовать (что-то, возможно, называется toRaiseException или подобное), или это связано с обработкой ошибок (которой, честно говоря, нет), так что я могуперед тем, как приступить к тестированию, необходимо добавить некоторую обработку ошибок.

Вот мой код:

jwt.service.ts

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class JwtService {
  /**
   * This method takes the token as an argument and saves it into the local storage.
   *
   * @param  token
   * @method saveToken
   * @return
   */
  saveToken(token: string) {
    window.localStorage['jwtToken'] = token;
  }
}

jwt.service.spec.ts

import { TestBed, inject } from '@angular/core/testing';
import { JwtService } from './jwt.service';

const TOKEN = "SomeToken";

describe('JwtService', () => {
  beforeEach(() => {
    TestBed.configureTestingModule({
      providers: [
        JwtService
      ]
    });
  });


  //saveToken

  it('Call to function is made when there is no access token in arguments', inject([JwtService],
    (service: JwtService) => {
      expect(function() { service.saveToken(null); }).toThrow();
    }));

  it('Call to function is made when the access token is in the wrong format', inject([JwtService],
    (service: JwtService) => {
      let data = {"Token": TOKEN}
      expect(function() { service.saveToken(data); }).toThrow();
    }));


});

1 Ответ

0 голосов
/ 06 декабря 2018

Я поместил ваш тестовый пример в Stackblitz , чтобы проверить ваше утверждение о том, что: ", когда я запускаю тестовый пример, он останавливается даже перед запуском тестового примера, потому что нет никаких аргументов (илинедопустимые аргументы) для функции, поэтому она никогда не запускается. "

Я подумал, что это странно, а не то, что я ожидал, поэтому после настройки Stackblitz я вставил консоль.войдите в метод saveToken().Если вы нажмете на Консоль (внизу слева от окна теста Жасмин в Stackblitz), вы увидите, что функция действительно вызывается даже в случае, когда параметры не передаются.В настоящее время я закомментировал эти тесты (с «x» в начале теста), но не стесняйтесь удалить x и посмотреть, что я имею в виду.

Typescript действительно жалуется, когда функция вызывается без параметров, и снова, когда она вызывается с неправильным типом, так что, возможно, именно это вы и имели в виду под своим комментарием, но сам JavaScript подходит в обоих случаях,вот почему я предполагаю, что вы хотите проверить это в своем коде.

Я написал новый метод, который является одним из способов подойти к этому, посмотрите saveTokenWithErrorChecking() в Stackblitz.Это воспроизводится здесь:

saveTokenWithErrorChecking(token: string) {
    if(token === undefined) {
        console.log('saveTokenWithErrorChecking() executed and throwing an error');
        throw new Error('no arguments');
    } else if (typeof token !== 'string') {
        console.log('saveTokenWithErrorChecking() throws a type error');
        throw new Error('token is the wrong type');
    } else {
        console.log('saveTokenWithErrorChecking() executed with no error');
        localStorage.setItem('jwtToken', token);
    }
}  

Наконец, вы заметите, что я использую угловой API для localStorage вместо прямого вызова объекта окна.:)

Надеюсь, это все поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...