Говорит, что шпион Жасмин не вызывается, но я вижу, что его называют - PullRequest
0 голосов
/ 27 ноября 2018

Я не могу понять, почему Жасмин утверждает, что функция, за которой я слежу, не вызывается, тем более что она регистрируется в buildLinksObj при вызове и не вызывается при удалении .and.callThrough () Iчувствую, что я написал подобный код несколько раз, прежде чем без проблемЯ использую Jasmine 2.9

Сообщение об ошибке, которое я получаю:

1) addToLinks should call buildLinksObj if its given an object with children 
     it should add the personalized links to PageApp.meta.analytics.links
     Expected spy buildLinksObj to have been called.
    at UserContext.<anonymous> (http://localhost:9877webpack:///tests/specs/common/FetchPersonalContent.spec.js:854:0 <- tests/app-mcom.js:104553:48)

За исключением моего кода:

FetchPersonalContent.js

const buildLinksObj = (responseObj = {}, targetObj, PageApp) => {
  console.log('it logs in buildLinksObj') // This is logging!
}

const addToLinks = (responseArr, personalizedLinks) => {
  responseArr.forEach((media) => {
    const type = media.type;
      const typeObj = media[type];
      buildLinksObj(typeObj, personalizedLinks, PageApp);
      if (typeObj && typeObj.children) {
        console.log('has children!')
        console.log('typeObj.children is: ', typeObj.children);
        typeObj.children.forEach((child) => {
          console.log('has a child')
          buildLinksObj(child, personalizedLinks, PageApp);
          console.log('buildLinksObj was definitely called. what the heck?')
        });
      }
    });
}

export {buildLinksObj, addToLinks, FetchPersonalContent as default,
};

FetchPersonalContent.spec.js

import * as FetchPersonalContent from '../../../src/FetchPersonalContent'; // my path is definitely correct

describe('it should add the personalized links to PageApp.meta.analytics.links', () => {
  it('addToLinks should call buildLinksObj if its given an object with children ', () => {
    spyOn(FetchPersonalContent, 'buildLinksObj').and.callThrough();
    FetchPersonalContent.addToLinks([{
    "personalId": 30718,
    "type": "carousel",
    "carousel": {}
  }], {});
    expect(FetchPersonalContent.buildLinksObj).toHaveBeenCalled();
  });
});

Буду очень признателен за любую помощь!

1 Ответ

0 голосов
/ 16 декабря 2018

У меня такое ощущение, что FetchPersonalContent.buildLinksObj в файле спецификации не указывает на тот же экземпляр, что и buildLinksObj в файле FetchPersonalContent.js.

Почему требуется export {FetchPersonalContent as default}?Я предполагаю, что вы поделились полным содержанием FetchPersonalContent.js в своем вопросе.

Возможные решения:

Вы можете попробовать удалить FetchPersonalContent из exportоператор.

Или

Вместо

export {buildLinksObj, addToLinks, FetchPersonalContent as default,
};

Вы можете напрямую export константы в файле FetchPersonalContent.js.

...