Как выполнить модульное тестирование метода компонента, основанного на обслуживании - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть следующий метод, и мне нужно провести тестирование при использовании Жасмин и Карма. Насколько я знаю, это subscribe, который не выполняется. Во время тестирования переменные addedToDB и existingInDB не обновляются, и мое тестирование хочет подтвердить, что они ложные.

addBank(name: string, country: string, pageurl: string, fromcurrency: string,
          tocurrencyxpath: string, buyxpath: string, sellxpath: string, unit: string) {
    this.service.postBank(name, country, pageurl, fromcurrency, tocurrencyxpath, buyxpath, sellxpath, unit).subscribe(
      data => {
        console.log('POST executed', data);
        if (name === '' || country === '' || pageurl === '' || fromcurrency === ''
          || tocurrencyxpath === '' || buyxpath === '' || sellxpath === ''
          || unit === '') {
          this.openSnackBar('Please fill all the areas', '');
          this.addedToDB = false;
          this.existingInDB = false;
        } else ...

На данный момент тестирование:

it('should reject the bank - unsufficient info', async () => {
const add = new AddBanksComponent(service, snackbar);
add.addBank('Danske Bank', 'DK',
  'http://danskebank.dk', 'DKK',
  'abcdefghijklm', 'abcdefghijklm',
  'abcdefghijklm', '');
console.log('mock ' + add.addedToDB);
console.log('mock ' + add.existingInDB);
await fixture.whenStable();
fixture.detectChanges();
expect(add.addedToDB).toEqual(false);
expect(add.existingInDB).toEqual(false);

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Вам необходимо смоделировать postBank:

it('should reject the bank - unsufficient info', async () => {
   const add = new AddBanksComponent(service, snackbar);

   const result = ...
   spy = spyOn(add, 'postBank').and.returnValue(result);
   add.addBank('Danske Bank', 'DK','http://danskebank.dk', 'DKK','abcdefghijklm', 'abcdefghijklm','abcdefghijklm', '');

   await fixture.whenStable();
   fixture.detectChanges();
   expect(add.addedToDB).toEqual(false);
   expect(add.existingInDB).toEqual(false);
})
0 голосов
/ 01 ноября 2019

Услуга является внешним классом и может / должна быть полностью смоделирована.

const data = // whatever you want the subscribe to pass through

// Create an object that will mock the subscribe
const obsMock = jamsine.createSpyObj('obsMock', ['subscribe'];

// Subscribe is a function that takes a callback. We have to mock that here
obsMock.subscribe.and.callFake((callback) => {
  callback(data);
});

// Create a service spy
const service = jasmine.createSpyObj('service', ['postBank']);

// Have the service.postBank method call return our mocked observable
service.postBank.and.returnValue(obsMock)

// Pass in the mocked service
const add = new AddBanksComponent(service, snackbar);

add.addBank('Danske Bank', 'DK',
   'http://danskebank.dk', 'DKK',
   'abcdefghijklm', 'abcdefghijklm',
   'abcdefghijklm', '');

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