TL;博士
如何翻译这样的节点脚本:
"test": "NODE_ENV=test riteway -r @babel/register 'src/**/*.test.js' | tap-nirvana",
使用SWC而不是 Babel?
语境
我们最近升级了 Next.js 版本。Next.js 现在支持SWC 而不是 Babel。
我们项目中 React 的单元测试是用RITEway编写的。测试命令为:
"test": "NODE_ENV=test riteway -r @babel/register 'src/**/*.test.js' | tap-nirvana",
它首先使用 Babel 转换文件,否则import
语句和 JSX 会导致错误。
在我们尝试迁移到 SWC 的过程中,我们对 CLI 不满意。但是,我们找到了@swc-node/register
包。它允许我们像这样转换我们的命令:
"test": "riteway -r @swc-node/register src/**/*.test.js | tap-nirvana"
它修复了像import
语句这样的新语法,并且这样的测试将运行:
import { describe } from 'riteway';
describe('my test', async assert => {
assert({
given: 'true',
should: 'be true',
actual: true,
expected: true,
});
});
但是,像这样对 React 组件进行测试
import { describe } from 'riteway';
import render from 'riteway/render-component';
import Authentication from './user-authentication-component';
describe('user authentication component', async assert => {
const $ = render(<Authentication />);
assert({
given: 'just rendering',
should: "render 'Authentication'",
actual: $('*:contains("Authentication")').text(),
expected: 'Authentication',
});
});
仍然抛出以下错误:
$ yarn test
yarn run v1.22.17
$ riteway -r @swc-node/register src/**/*.test.js | tap-nirvana
/Users/user/dev/learning-flow/node_modules/@swc/core/index.js:135
return bindings.transformSync(isModule ? JSON.stringify(src) : src, isModule, toBuffer(newOptions));
^
Error: error: Expression expected
|
7 | const $ = render(<Authentication />);
| ^
error: Expression expected
|
7 | const $ = render(<Authentication />);
| ^
error: Unexpected token `)`. Expected this, import, async, function, [ for array literal, { for object literal, @ for decorator, function, class, null, true, false, number, bigint, string, regexp, ` for template literal, (, or an identifier
|
7 | const $ = render(<Authentication />);
| ^
Caused by:
0: failed to process js file
1: Syntax Error
at Compiler.transformSync
我们如何创建该命令以使其与 SWC 一起运行?