Как проверить класс песочницы в жасмине - PullRequest
0 голосов
/ 14 мая 2018

Я использую подход слоя ngrx и sanbox в приложении angular4. В настоящее время я застрял в тестировании sandox. Ниже я пишу спецификацию для своего класса песочницы

Код песочницы:

 @Injectable()
 export class MonitoringSandbox {
 constructor(public deviceService: DeviceService,
    public appStateManagerService: AppStateManagerService) {
  }

 public getDeviceIdWithRowIndex(): Observable<Array<RowIdDeviceIdKeyValue>> {
    return 
    this.appStateManagerService.getFromStore<Array<RowIdDeviceIdKeyValue>>(
        state => state.devicesState.kvRows
    );
}

public setSelectedDevice(deviceId: string) {
    this.appStateManagerService.saveToStore(new SetSelectedDevice(deviceId));
}

Песочницы спец.ц

 describe('Monitoring Sandbox', () => {
 beforeEach(
 async(() => {
  TestBed.configureTestingModule({
    imports: [UnitTestsModule]
  });
 })
);
beforeEach(inject([MonitoringSandbox], (monSandbox: MonitoringSandbox) => {
  this.MonitoringSandbox = monSandbox;
})
);
/* teh failing test */
it('Should get and set selected row  value from session storage for selected 
 row', () => {
let selectedRow: string;
this.MonitoringSandbox.setSelectedRow('143');
selectedRow = this.MonitoringSandbox.getSelectedRow();
expect(selectedRow).toEqual('143');
});

Я получаю ошибку ниже:

Chrome 68.0.3419 (Windows 7 0.0.0) Песочница мониторинга должна получить и установить значение выбранной строки из хранилища сеанса для выбранной строки. FAILED

Ошибка: StaticInjectorError [MonitoringSandbox]: Свойства ошибки: Object ({ngTempTokenPath: null, ngTokenPath: [Function]})

Где я ошибаюсь при введении класса песочницы, очевидно, что объект песочницы не определен

1 Ответ

0 голосов
/ 14 мая 2018

Это из-за вашего тестового стенда:

  TestBed.configureTestingModule({
    imports: [UnitTestsModule]
  });

Нет никакой зависимости, связанной с вашей песочницей.

Кроме того, я не знаю, что такое песочница в этом контексте, может быть, вы могли бы предоставить некоторый код, чтобы помочь вам понять и предложить решение, подходящее для этой проблемы?

РЕДАКТИРОВАТЬ

Ваша песочница является службой (она украшена @Injectable), поэтому вам необходимо импортировать ее в свой испытательный стенд.

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

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

  TestBed.configureTestingModule({
    imports: [UnitTestsModule],
    providers: [
      { provide: MonitoringSandbox, useValue: {
        getDeviceIdWithRowIndex: () => Observable.of(/* an array of RowIdDeviceIdKeyValue */),
        setSelectedDevice: () => null // does nothing, so no return needed
      }}
    ]
  });

РЕДАКТИРОВАТЬ 2

this.MonitoringSandbox = monSandbox;

Эта строка ничего не значит.Замените его на это

sandboxMock: MonitoringSandbox; // place it as the first line of your describe

И в вашем перед каждым, сделайте это

beforeEach(() => {
  sandboxMock = TestBed.get(MonitoringSandbox);
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...