首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用` fetch - mock -jest 1.5.1` lib模拟fetch调用

无法使用` fetch - mock -jest 1.5.1` lib模拟fetch调用
EN

Stack Overflow用户
提问于 2021-10-13 09:37:47
回答 1查看 45关注 0票数 0

我正在尝试使用此fetch-mock-jest模拟一个fetch调用,但它仍然尝试转到远程地址,并最终失败并返回错误消息FetchError: request to https://some.domain.io/app-config.yaml failed, reason: getaddrinfo ENOTFOUND some.domain.io]

下面是测试代码

代码语言:javascript
复制
import { AppConfig } from '@backstage/config';
import { loadConfig } from './loader';
import mockFs from 'mock-fs';
import fetchMock from 'fetch-mock-jest';

describe('loadConfig', () => {
  beforeEach(() => {
    fetchMock.mock({
      matcher: '*',
      response: `app:
          title: Example App
          sessionKey: 'abc123'
      `
    });
  });

  afterEach(() => {
    fetchMock.mockReset();
  });

  it('load config from remote path', async () => {
    const configUrl = 'https://some.domain.io/app-config.yaml';

    await expect(
       loadConfig({
        configRoot: '/root',
        configTargets: [{ url: configUrl }],
        env: 'production',
        remote: {
          reloadIntervalSeconds: 30,
        },
      })
    ).resolves.toEqual([
      {
        context: configUrl,
        data: {
          app: {
            title: 'Example App',
            sessionKey: 'abc123',
          },
        },
      },
    ]);
    expect(fetchMock).toHaveBeenCalledTimes(1);
  });

  function defer<T>() {
    let resolve: (value: T) => void;
    const promise = new Promise<T>(_resolve => {
      resolve = _resolve;
    });
    return { promise, resolve: resolve! };
  }
});

loadConfig有我想要模仿的抓取代码。

代码语言:javascript
复制
export async function loadConfig(
  options: LoadConfigOptions,
): Promise<AppConfig[]> {
  const loadRemoteConfigFiles = async () => {
    const configs: AppConfig[] = [];

    const readConfigFromUrl = async (remoteConfigProp: RemoteConfigProp) => {
      const response = await fetch(remoteConfigProp.url);
      if (!response.ok) {
        throw new Error(
          `Could not read config file at ${remoteConfigProp.url}`,
        );
      }

      remoteConfigProp.oldETag = remoteConfigProp.newETag ?? undefined;
      remoteConfigProp.newETag =
        response.headers.get(HTTP_RESPONSE_HEADER_ETAG) ?? undefined;
      remoteConfigProp.content = await response.text();

      return remoteConfigProp;
    };

.......
    return configs;

}

let remoteConfigs: AppConfig[] = [];
  if (remote) {
    try {
      remoteConfigs = await loadRemoteConfigFiles();
    } catch (error) {
      throw new Error(`Failed to read remote configuration file, ${error}`);
    }
  }

........ do some stuff with config then return
return remoteConfigs;
}

配置是一个yaml文件,它最终会被解析并转换成配置对象。

你知道为什么它不能模拟fetch调用吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-14 10:50:07

已替换

代码语言:javascript
复制
import fetchMock from 'fetch-mock-jest';

使用

代码语言:javascript
复制
const fetchMock = require('fetch-mock').sandbox();
const nodeFetch = require('node-fetch');
nodeFetch.default = fetchMock;

和带有fetchMock.restore();fetchMock.mockReset();

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69553087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档