PillowPillow / ng2-webstorage

Localstorage and sessionstorage manager - Angular service
MIT License
428 stars 91 forks source link

Issues during testing #122

Open VamsiDevalla opened 4 years ago

VamsiDevalla commented 4 years ago

Versions (please complete the following information):

Describe the bug I have updated my application to angular 8 from 5. Everything is good from the application side but the unit tests are failing saying Can't resolve all parameters for LocalStorageService: (?). at syntaxError (http://localhost:9876/_karma_webpack_/node_modules/@angular/compiler/fesm2015/compiler.js:2175:1).

My test file looks like this: `import { TestBed, inject} from '@angular/core/testing'; import { LocalStorageService} from 'ngx-webstorage'; import { ThemeService } from './theme.service'; import { HttpTestingController, HttpClientTestingModule } from '@angular/common/http/testing';

const currentUser = require('../../../assets/data/currentUser.json'); describe('ThemeService', () => { let httpMock: HttpTestingController; let storage: LocalStorageService; beforeEach(() => { TestBed.configureTestingModule({ imports: [ HttpClientTestingModule, ], providers: [ LocalStorageService, ThemeService ] }); storage = TestBed.get(LocalStorageService); httpMock = TestBed.get(HttpTestingController); });

beforeEach(() => { storage.store('currentuser', currentUser); });

it('should be created', inject([ThemeService], (service: ThemeService) => { expect(service).toBeTruthy(); })); });`

To Reproduce Steps to reproduce the behavior:

  1. Write a test file 'using localStorageService'
  2. Run the tests
  3. See error

Expected behavior A clear and concise description of what you expected to happen.

Screenshots If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

Additional context Add any other context about the problem here.

rolfed commented 4 years ago

I'm running into the same issue. Is there a solution to this problem?

neilgrewal commented 4 years ago

Any updates on this? Running into the issue with SessionStorageService

lePhilissimo commented 3 years ago

I was able to get around this by:

  1. creating a mock object that implements the StorageService interface.
  2. configuring my provider to use the mocked object. Definitely not an ideal long term solution, but it got the tests passing again.

// Mock LocalStorageService const mockStore = {}; const localStorageMock: StorageService = { store: (key: string, value: string) => { mockStore[key] = ${value}; }, retrieve: (key: string): string => { return key in mockStore ? mockStore[key] : null; }, clear: (key: string) => { delete mockStore[key]; }, getStrategyName(): string { return 'Local'; }, observe(key: string): Observable { return EMPTY; } };

And then

beforeEach(() => { TestBed.configureTestingModule({ providers: [ {provide: LocalStorageService, useValue: localStorageMock} ], }); ....