Объявить глобальные переменные Nodejs в хуке «до» в WebdriverIO с использованием TypeScript - PullRequest
3 голосов
/ 08 мая 2020

Я пытаюсь перенести свой проект JS WDIO на TypeScript

Я столкнулся с проблемой, когда во время разработки TypeScript не распознает мои Nodejs глобальные переменные, объявленные в before хуке в моем Конфигурация WDIO:

...
let chai = require('chai');
...
before: async function (capabilities, specs) {
        //setting global variables
        global.foo = "bar"
        global.expect= chai.expect;
        global.helpers = require("../helpers/helpers");
        // ... etc.
        // ... etc.
    },

Я сталкивался с разными темами SO, но похоже, что они не актуальны, поскольку здесь подход немного отличается (из-за хука before) ...

Мне даже удалось заставить его работать в какой-то момент, создав global.d.ts с чем-то внутри вроде:

declare module NodeJS {
    interface Global {
        foo: string
    }
}

Но после того, как этот машинописный текст перестал распознавать типы WDIO, как browser, $ et c. А также с этим подходом мне пришлось использовать global.foo в своих тестах, что означает, что мне нужно изменить сотни вхождений foo.

Как мне перенести свой проект на TypeScript и продолжить использование моих глобальных переменных из before крючок?

1 Ответ

1 голос
/ 11 мая 2020

На самом деле вам нужно расширить как интерфейс NodeJS.Global, так и глобальную область видимости

Ваш global.d.ts будет выглядеть так

import chai from "chai";

// we need to wrap our global declarations in a `declare global` block
// because importing chai makes this file a module.
// declare global modifies the global scope from within a module
declare global {
  const foo: string;
  const expect: typeof chai.expect;
  const helpers: typeof import("../helpers/helpers");

  namespace NodeJS {
    interface Global {
      foo: typeof foo;
      expect: typeof expect;
      helpers: typeof helpers;
    }
  }
}

Обратите внимание, что я объявил фактические глобальные переменные const потому что вы устанавливаете их только путем ссылки global в вашем before хуке.

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