#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 () => {
await mongoose.connect(global.__MONGO_URI__, { useNewUrlParser: true, useCreateIndex: true }, (err) => {
if (err) {
console.error(err);
process.exit(1);
}
});
});
it('create amp; 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 run test
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)
Я добавлю изображение для выделения
Ожидаемая запятая?
Как это исправить?
Комментарии:
1. Похоже, вы пропустили как минимум две круглые скобки, для
describe
блока и одну дляbeforeAll
2. @Christian Взгляните на мою правку, пожалуйста!
Ответ №1:
Вам нужно добавить закрывающую скобку для describe
и beforeAll
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 amp; 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
Комментарии:
1. Спасибо, в любом случае, у меня снова похожие проблемы.
2.Где-то все еще есть синтаксическая ошибка. Пожалуйста, обновите свой код в вопросе в соответствии с предлагаемыми изменениями. Кроме того, измените
connect
вызов, чтобы не использовать сочетаниеawait
и стиль обратного вызова:try {
await mongoose.connect(global.__MONGO_URI__, { useNewUrlParser: true, useCreateIndex: true });
} catch(err) {
console.error(err);
process.exit(1);
}
Ответ №2:
Мне удалось решить эту проблему. Поведение компиляторов каким-то образом вводило в заблуждение. Решение состояло в том, чтобы поместить 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__/user.test.js
User Model Test
✓ create amp; 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.