Ошибка типа: не может заглушить несуществующую выборку собственного свойства - Sinon, Pact - PullRequest
0 голосов
/ 02 февраля 2019

TypeError: Невозможно заблокировать несуществующую собственную выборку свойства

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**

Я написал несколько тестов для правильного идентификатора.Но я писал тест в случае неудачи при извлечении метода handle-fetch.

В моем другом проекте узла я проделал этот путь, и он работает отлично.Но это реактивный проект.Нужно ли устанавливать что-то конкретное, чего я не получаю по умолчанию.

1 Ответ

0 голосов
/ 03 февраля 2019
  1. Если вы пытаетесь каким-то образом издеваться над стандартом global, я не думаю, что вы можете сделать это таким образом.Попытавшись выполнить этот код самостоятельно, fetch действительно не применяется к объекту global.
  2. Я не уверен, какое отношение это имеет к тесту Pact?Насмешка над объектом извлечения определенно не будет чем-то, что вы хотели бы сделать в рамках теста Pact.

Чего вы пытаетесь достичь?

Другой вариант -создайте новый объект службы совместной работы, который выполняет выборку, и вместо этого смоделируйте его.

...