Angular 1 vs 2 Services State - PullRequest
       9

Angular 1 vs 2 Services State

0 голосов
/ 06 сентября 2018

Я конвертирую приложение из Angular 1 в Angular 2+.Я хотел попытаться лучше понять, как атрибуты обрабатываются в сервисах.Например:

В Angular 1 у нас есть служба, определенная так:

function MyService(AnotherService) {

  let flags = [];

А в Angular 2+ у нас есть служба, определенная так:

@Injectable()
export class MyService {

    private flags = [];

    constructor(private _anotherService: AnotherService) { }

Проблема в том, что мы получаем тесты, которые не выполняются, потому что в Angular 1 кажется, что состояние «flags» сбрасывается в пустой массив каждый раз, когда сервис вводится в тест, а в Angular 2+ состояние «flags "переносит между тестами.

Я играл с игровой площадкой TypeScript, чтобы попытаться определить, почему это так.Короче говоря, как я могу получить «флаги» для сброса в пустой массив каждый раз, когда сервис внедряется в Angular 2, как это происходит со службой Angular 1?Правильно ли я предположил, что это то, что происходит?

Спасибо!

----- ОБНОВЛЕНИЕ -----------

Этокак выглядит тест

fdescribe('Unit: MyService', function () {
  let service;

  beforeEach(function () {
    angular.mock.inject(function (MyService) {
      service = MyService;
    });
  });

  // PASS: For Angular 1 and Angular2+
  it('should exist', function () {
    expect(service).toBeDefined();
  });

  // PASS: For Angular 1 and Angular2+
  it('should create flags', function () {
    let id = 1;
    let property = 'testProperty';
    let value = 'testValue';

    service.setFlags(id, property, value);

    let flags = service.getFlags();

    let foundElement = flags.find((element) => {
      return element.id === id;
    });

    expect(foundElement.property).toBe(value);
  });

  // PASS Angular 1, FAIL Angular 2+
  it('should update flags', function () {
    let id = 1;
    let property = 'testProperty';
    let value = 'testValue';

    service.setFlags(id, property, value);

    let flags = service.getFlags();

    let foundElement = flags.find((element) => {
      return element.id === id;
    });

    let newValue = 'testNewValue';

    service.setFlags(id, property, newValue);

    expect(foundElement.testProperty).toBe(newValue);

  });
...