Jest Mock возвращаемое значение функции - PullRequest
0 голосов
/ 03 октября 2019

У меня есть простая функция, подобная этой, я хотел бы смоделировать возвращаемое значение authentication.getAccessToken () с допустимым accessToken, мне трудно это сделать. Пробовал разными способами, но не смог, Может кто-нибудь помочь мне в этом?

  import decodeJWT from "jwt-decode";      
  import authentication from "@kdpw/msal-b2c-react";

  export const testfunction = () => {
      const jwt = decodeJWT(authentication.getAccessToken());
      var current_time = Date.now() / 1000;
      var remaining_time = jwt.exp - current_time;
      return "testing done"
    }

Ниже приведен модульный тест, который я пробовал, так как authentication.getAccessToken () не получает никакого значения, он выдает ошибку InvalidToken.

    import * as commonUtil from "../commonUtil";

    describe('test test function', () => {
       it("Mock", () => {        
          //The following runs but test fails due to null return
          const authentication = require("@kdpw/msal-b2c-react");
          authentication.getAccessToken = jest.fn().mockReturnValue(false);
          expect(commonUtil.testfunction()).toBe(false)         
          }); 
       });

Сообщение об ошибке

Comparing two different types of values. Expected boolean but received null.

1 Ответ

0 голосов
/ 03 октября 2019

Вам необходимо импортировать authentication в тесте.

См. Пример CodeSandbox . Откройте с редактором, чтобы проверить модульные тесты.

Короче говоря, вам нужно сделать что-то вроде этого.

test('test test function', () => {
    const resp = { data: '' };
    import authentication from "@kdpw/msal-b2c-react";
    authentication.getAccessToken = jest.fn().mockReturnValue("eyJ0eXAiOiJKV1QiLCJhbdjhkbE5QNC1jNTdkTzZR...");
    expect(commonUtil.testfunction()).toEqual("testing done")
});

Используйте describe, чтобы обернуть тестовые наборы, которые используют mocked authenticationтаким образом, поддельная функция останется локальной только в этом конкретном describe, и все, что находится за ее пределами, будет использовать действительное authentication.getAccessToken().

...