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 框架结合使用。
如标题所述,我希望测试我们在 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 框架结合使用。