React Native with TypeScript 和 cucumber-js:将 TypeScript 函数导入 Cucumber 步骤定义

React Native with TypeScript and cucumber-js: Importing TypeScript Functions into Cucumber Step Definitions

如标题所述,我希望测试我们在 React Native 应用程序中使用的一些功能。事实上,将来我想在我们的黄瓜测试上编写业务功能 based - 所以理想情况下,我的开发工作流程将从我在我们的代码库中创建一个测试开始,并努力解决它直到它满足所有测试。但是,我 运行 遇到了一个问题,每当我从我们的代码库中导入上述函数时,黄瓜就会中断并且测试不会 运行。到目前为止,使用 detox 进行 end-to-end 测试工作正常(通过 TestID 等与元素交互),但在最近的一组测试中,我试图显式调用一个函数,这就是我们开始 运行 出错的地方。

我们允许在 TypeScript 中进行黄瓜测试,方法是在我们的 cucumber.js 文件中写入以下内容:

let common = [
   'features/**/*.feature',                // Specify our feature files
   '--require-module ts-node/register',    // Load TypeScript module
   '--require features/support/**/*.ts',   // Load support files
   '--require step_definitions/**/*.ts',   // Load step definitions
].join(' ');

module.exports = {
  default: common,
};

然而,在我的 step_definitions 中,一旦我尝试从我们的 React Native 项目导入一个函数,我就开始收到类似这样的错误,例如来自 react-native:

/Users/file/path/to/project/here/node_modules/react-native/index.js:14
import typeof AccessibilityInfo from './Libraries/Components/AccessibilityInfo/AccessibilityInfo';
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at wrapSafe (internal/modules/cjs/loader.js:984:16)
    at Module._compile (internal/modules/cjs/loader.js:1032:27)
    at Module._extensions..js (internal/modules/cjs/loader.js:1097:10)
    at Object.require.extensions.<computed> [as .js] (/Users/file/path/to/project/here/node_modules/ts-node/src/index.ts:1300:43)
    at Module.load (internal/modules/cjs/loader.js:933:32)
    at Function.Module._load (internal/modules/cjs/loader.js:774:14)
    at Module.require (internal/modules/cjs/loader.js:957:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at Object.<anonymous> (/Users/file/path/to/project/here/src/helpers/utils.ts:2:1)
    at Module._compile (internal/modules/cjs/loader.js:1068:30)
    at Module.m._compile (/Users/file/path/to/project/here/node_modules/ts-node/src/index.ts:1310:23)
    at Module._extensions..js (internal/modules/cjs/loader.js:1097:10)
    at Object.require.extensions.<computed> [as .ts] (/Users/file/path/to/project/here/node_modules/ts-node/src/index.ts:1313:12)
    at Module.load (internal/modules/cjs/loader.js:933:32)
    at Function.Module._load (internal/modules/cjs/loader.js:774:14)
    at Module.require (internal/modules/cjs/loader.js:957:19)
codepath: /Users/file/path/to/project/here/step_definitions/5-Chat/2-1-chat-deletion-indicator.steps.ts

我在这里看到 commonjs (cjs) 模块正在触发错误。我明白 React Native 是为 ES6 写的,所以 commonjs 一开始就错了。我 不知道 知道如何做的是保留我喜欢的 cucumber.js 安装文件以及在没有 ts-node 的情况下在 TypeScript 中保留我的测试(和导入的函数)的能力抱怨。

如有任何帮助、指点或想法,我们将不胜感激。我很乐意包含任何其他所需的配置和文件。

对于单个功能的测试(在这种情况下,这些是单元测试),我已经开始使用 jest-cucumber - 它有自己的配置,不需要使用这样的 cucumber.js 文件.此 cucumber.js 文件模式来自将 Cucumber 与像 detox 这样的 E2E 框架结合使用。