Javascript 为什么Jest遇到了意外的标记?

Javascript 为什么Jest遇到了意外的标记?,javascript,jestjs,Javascript,Jestjs,我不太熟悉Jest测试,我编写了一个小user.test.js const mongoose = require('mongoose'); const UserModel = require('../models/User'); const userData = { username: 'TekLoon', email: 'jon@aol.com' }; describe('User Model Test', () => { beforeAll(async () => {

我不太熟悉Jest测试,我编写了一个小user.test.js

const mongoose = require('mongoose');
const UserModel = require('../models/User');
const userData = { username: 'TekLoon', email: 'jon@aol.com' };

describe('User Model Test', () => {

    beforeAll(async () => {
        await mongoose.connect(global.__MONGO_URI__, { useNewUrlParser: true, useCreateIndex: true }, (err) => {
            if (err) {
                console.error(err);
                process.exit(1);
            }
        });
    });

    it('create & save user successfully', async () => {
        const validUser = new UserModel(userData);
        const savedUser = await validUser.save();
        // Object Id should be defined when successfully saved to MongoDB.
        expect(savedUser._id).toBeDefined();
        expect(savedUser.username).toBe(userData.username);
        expect(savedUser.email).toBe(userData.email);
    });
});

目录结构

globalConfig.json
index.js
models
node_modules
package.json
package-lock.json
__tests__
当我运行npm运行测试时

FAIL  .history/__tests__/user.test_20201027153457.js
  ● Test suite failed to run

    Jest encountered an unexpected token
    Details:

SyntaxError: /home/milenko/pract/post/.history/__tests__/user.test_20201027153457.js: Unexpected token (26:7)

  24 |         expect(savedUser.username).toBe(userData.username);
  25 |         expect(savedUser.email).toBe(userData.email);
> 26 |     });
         |        ^
我听从了克里斯蒂安的建议,问题又来了

 FAIL  __tests__/jest-mongodb-config.js
  ● Test suite failed to run

    Your test suite must contain at least one test.

      at onResult (node_modules/@jest/core/build/TestScheduler.js:175:18)
      at node_modules/@jest/core/build/TestScheduler.js:304:17
      at node_modules/emittery/index.js:260:13
          at Array.map (<anonymous>)
      at Emittery.Typed.emit (node_modules/emittery/index.js:258:23)

 FAIL  __tests__/jest.config.js
  ● Test suite failed to run

    Your test suite must contain at least one test.

      at onResult (node_modules/@jest/core/build/TestScheduler.js:175:18)
      at node_modules/@jest/core/build/TestScheduler.js:304:17
      at node_modules/emittery/index.js:260:13
          at Array.map (<anonymous>)
      at Emittery.Typed.emit (node_modules/emittery/index.js:258:23)
FAIL\uuuu测试\uuu/jest-mongodb-config.js
● 测试套件无法运行
您的测试套件必须至少包含一个测试。
在onResult(node_modules/@jest/core/build/TestScheduler.js:175:18)
在node_modules/@jest/core/build/TestScheduler.js:304:17
在node_modules/emittery/index.js:260:13
at Array.map(

需要逗号吗


如何解决此问题?

您需要在
description
之前添加右括号

const mongoose = require('mongoose');
const UserModel = require('../models/User');
const userData = { username: 'TekLoon', email:'jon@aol.com' };

describe('User Model Test', () => {

    beforeAll(async () => {
        await mongoose.connect(global.__MONGO_URI__, { useNewUrlParser: true, useCreateIndex: true }, (err) => {
            if (err) {
                console.error(err);
                process.exit(1);
            }
        });
    }) // added closing parenthesis

    it('create & save user successfully', async () => {
        const validUser = new UserModel(userData);
        const savedUser = await validUser.save();
        // Object Id should be defined when successfully saved to MongoDB.
        expect(savedUser._id).toBeDefined();
        expect(savedUser.username).toBe(userData.username);
        expect(savedUser.email).toBe(userData.email);
    });
}); // added closing parenthesis

我设法解决了这个问题。编译器的行为在某种程度上具有误导性。解决方法是 包含此内容的jest.config.js

module.exports = {
  preset: '@shelf/jest-mongodb',
};
和jest-mongodb-config.js

module.exports = {
  mongodbMemoryServerOptions: {
    instance: {
      dbName: 'jest'
    },
    binary: {
      version: '4.4.1', 
      skipMD5: true
    },
    autoStart: false
  }
};
在项目目录中(tests仅为测试文件保留)。 现在工作正常(简单示例)


您似乎至少漏掉了两个括号,一个用于
描述
块,另一个用于
之前的
@Christian请查看我的编辑!谢谢,无论如何,我又遇到了类似的问题。仍然有语法错误。请根据建议的编辑更新问题中的代码。另外,更改
连接调用以避免混合使用
await
和回调样式:
尝试{
await mongoose.connect(全局.uuu MONGO\u URI uuuuu,{useNewUrlParser:true,useCreateIndex:true})
捕获(err){
控制台.错误(err);
进程.退出(1)

tests__/user.test.js
  User Model Test
    ✓ create & save user successfully (19 ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        0.895 s, estimated 2 s
Ran all test suites.