как смоделировать переменные внутри функции в шутку - PullRequest
0 голосов
/ 21 июня 2019

Я хочу протестировать метод canViewPage в шутку. Как смоделировать const userPages, который является значениями из функции getUserPage

   canViewPage(page){
     const userPages = getUsersPages();
    if(userPages.includes(page)){
      return true;
    }
    return false;
   }


  getUsersPages(){
    // here i hardcode a list of pages, for simplicity purposes
    const pages = ['home','about','contact'];
    return pages

  }



вот что я попробовал

test('test canViewPage', () => {
    const spy = jest.spyOn(canViewPage, 'userPages');
    spy.mockReturnValue(['home','about','contact']);

    expect(canViewPage('premiumPage')).toBe(false); 

    spy.mockRestore();
  });

Я тоже пробовал это

test('test canViewPage', () => {
    const spy = jest.spyOn(canViewPage, 'getUsersPage');
    spy.mockReturnValue(['home','about','contact']);

    expect(canViewPage('premiumPage')).toBe(false); 

    spy.mockRestore();
  });

1 Ответ

0 голосов
/ 21 июня 2019

Чтобы смоделировать значение userPages, вы должны смоделировать getUserPage.Чтобы достичь этого, это зависит от того, где и как определены getUserPage и canViewPage.Я собираюсь предположить, что эти две функции определены в классе MyAwesomeClass

// MyAwesomeClass.js
export default class MyAwesomeClass {
  canViewPage(page) {
    const userPages = this.getUsersPages();
    if (userPages.includes(page)) {
      return true;
    }
    return false;
  }


  getUsersPages() {
    // here i hardcode a list of pages, for simplicity purposes
    const pages = ['home', 'about', 'contact'];
    return pages;
  }
}

// test.js
import MyAwesomeClass from '<path to MyAwesomeClass.js>'
test('test canViewPage', () => {
  const instance = new MyAwesomeClass()
  const spy = jest.spyOn(instance, 'getUsersPages');
  spy.mockReturnValue(['mockItem1','mockItem2','mockItem3']);

  expect(instance.canViewPage('premiumPage')).toBe(false);
  expect(instance.canViewPage('mockItem1')).toBe(true);

  spy.mockRestore();
});

, если canViewPage и getUsersPages являются статическими методами в классе, вы по-другому насмехаетесь

test('test canViewPage', () => {
  const spy = jest.spyOn(MyAwesomeClass, 'getUsersPages');
  spy.mockReturnValue(['mockItem1','mockItem2','mockItem3']);

  expect(MyAwesomeClass.canViewPage('premiumPage')).toBe(false);
  expect(MyAwesomeClass.canViewPage('mockItem3')).toBe(true);

  spy.mockRestore();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...