javascript - Ava 单元测试因 TypeScript 失败 ("SyntaxError: Unexpected identifier")

标签 javascript reactjs typescript create-react-app ava

我正在学习 TypeScript,并使用 create-react-app 创建了一个 TypeScript React 应用程序。它使用单独的 TypeScript 文件 logic.ts,该文件又导入 JSON 文件

import pastaData from './data/users-pasta.json'

 const ParsedUserData  = pastaData.map(data => ({name: data.name, gender:data.gender,favorites: data.favorites}));

export const getPastaData = () => ParsedUserData;

效果很好。但是当我运行我的 Ava 测试时(目前什么也不做)

const {getPastaData} = require( '../src/logic.ts')

describe("A suite", function() {
  it("contains spec with an expectation", function() {
    expect(true).toBe(true);
  });
}); 

我收到以下错误

/src/logic.ts:1
(function (exports, require, module, __filename, __dirname) { import pastaData from './data/users-pasta.json';
SyntaxError: Unexpected identifier

它在这里提示“pastaData”导入。

我设置 Ava 来使用 Typescript(来自 package.json)

{

  "ava": {
    "compileEnhancements": false,
    "extensions": [
      "ts"
    ],
    "require": [
      "ts-node/register"
    ]
  }
}

现在一直在尝试让 Ava-ts 正常工作。同样的问题。

我认为这是 ts-node 的问题,但将所有链接文件更改为“require”被证明是有问题的(并且 TypeScript 开始提示)。有没有办法让它与“ES-6”“导入”一起使用?还是还有其他我完全想念的东西?

非常感谢任何帮助!

最佳答案

AVA(带有 TypeScript 设置)在执行之前将 TypeScript 代码编译回 JavaScript。

并且 NodeJS 不支持 esm 语法,除非您正在执行 *.mjs

因此,您必须在 tsconfig.json 中将“模块”设置为“commonjs”:

{
  "compilerOptions": {
    "module": "commonjs"
  }
}

关于javascript - Ava 单元测试因 TypeScript 失败 ("SyntaxError: Unexpected identifier"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56566167/

相关文章:

reactjs - 在 React 中动态导入 svg

css - Material-UI [v0.x] 悬停样式上的 RaisedButton

JavaScript 无法在 Firefox 中运行

javascript - PHP AJAX jQuery 发送文件和文本

javascript - 使用 Cypress 断言 Vuetify v-text-field 值

javascript - 将 JS setInterval react 到 API

javascript - 重新加载页面时 localStorage 返回未定义

angular - 在变换管道中使用链式可观察量

javascript - 是否可以在 TypeScript 中使用类型化流?

typescript - 在 Typescript 中,我可以创建强制需要属性的映射类型吗?