类型错误:无法存根不存在自己的财产获取 - 兴农,契约

时间:2019-02-02 12:30:07

标签: mocha pact sinon-chai

类型错误:无法存根不存在自己的财产获取

declare namespace NodeJS {
  interface Global {
    fetch: (url: string, options?: Object) => Promise<any>;
  }
}
declare let global: NodeJS.Global;

    it("should handle fetch throwing an error message", () => {
              const fetchFailure = "Test fetch error!";
              const fetchStub: sinon.SinonStub =
              sinon.stub(global, "fetch").callsFake(
                  (url: string, options?: Object): Promise<any> => {
                    return new Promise((resolve, reject) => {
                      throw (fetchFailure);
                    });
                  });
              try {
          return getConfigTest.getData(arguments)
              .then(() => {
                expect.fail(null, null, "Attempt to retrieve when no configuration exists should have thrown exception");
              })
              .catch((reason) => {
                if (reason instanceof someError) {
                  expect(reason).to.equals("throwing error");
                } else  {
                  expect(reason).instanceOf(Error);
                  expect(reason.message).to.equals("The request failed.");
                }
              });
            } finally {
              fetchStub.restore();
            }
        });

注意:我正在调用getData方法,并且getData返回另一个方法handle-fetch,而内部句柄fetch'fetch'正在使用,我在这里进行了说明。

我正在Pact集成测试中使用此方法。我捻熄取方法和不符合实际的方法进行交互回我自己的数据。

有人可以帮我吗?如果您需要任何额外的信息。请让我知道在评论部分?

更新:-

export async function getData(arguments): Promise<dataConfig> {
  const json: any = await handle-fetch(`path_to_Api);
  return json as dataConfig;
}


export async function handle-fetch<T>(arguments): Promise<T> {
  let response: any;
  let apiErr: any;

  options = _.merge({
    headers: {
      "Accept": "application/json"
    }
  }, options);

  try {
    response = await fetch(url, options); //**here is the method which i want to stub**

我已经写了一些测试,以确保正确的ID。但是我正在编写测试,以防万一无法获取handle-fetch方法。

在我的另一个节点项目中,我已经这样做,并且运行良好。但是,这是反应项目。我是否需要安装默认情况下无法获取的特定内容。

1 个答案:

答案 0 :(得分:1)

  1. 假设您正在尝试以某种方式模拟标准global,那么我认为您不能这样做。尝试自己运行该代码后,fetch确实没有应用于global对象。
  2. 我不确定这与公约测试有什么关系?在Pact测试中,您当然不希望模拟fetch对象。

您要达到什么目标?

另一种选择是创建一个新的协作服务对象来执行获取,然后模拟出来。