Я конвертирую приложение из 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);
});