У меня есть это приложение express.js с набором тестов Mocha, которые я запускаю.В какой-то момент я недавно докернизировал проект.После dockerizing, это только половина моих тестов, потому что из-за ошибок mysql.Для генерации этих операторов SQL я использую Bookshelf.js / Knex.js.Я не буду показывать все тесты, потому что у них всех есть общая проблема.
Первый тест запускает этот код.
method.registerUser = (request, callBack) => {
let {
email,
username,
address,
city,
zip,
state,
password,
country,
} = request.body;
password = hashPassword(decrypt(password));
if(!testRegistration(request)) {
return callBack ({
success: false,
});
}
let insert = {
NAME: username,
PASSWORD: password,
EMAIL: email,
ADDRESS: address,
CITY: city,
ZIP: zip,
STATE: state,
COUNTRY: country,
};
User.forge(insert)
.save()
.then((user) => {
return callBack ({
success: true,
});
})
.catch(function (err) {
logger.log(err);
return callBack ({
success: false,
});
});
}
Именно здесь он дает модели User добавить нового пользователя в базу данных mysql.Пользовательская модель определяется этим json.
"database_test" : {
"client": "mysql",
"connection": {
"host": "DB",
"database": "TERRA_TEST",
"user": "root",
"port": "3306",
"password": "goon",
"charset": "utf8"
}
},
У меня есть серия миграций, которые выполняются перед каждым тестом, и схема результатов базы данных выглядит следующим образом.
+----------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| NAME | varchar(255) | YES | | NULL | |
| PASSWORD | varchar(255) | YES | | NULL | |
| EMAIL | varchar(255) | YES | | NULL | |
| ADDRESS | varchar(255) | YES | | NULL | |
| CITY | varchar(255) | YES | | NULL | |
| ZIP | varchar(30) | YES | | NULL | |
| STATE | varchar(255) | YES | | NULL | |
| COUNTRY | varchar(255) | YES | | NULL | |
+----------+------------------+------+-----+---------+----------------+
Однакокогда выполняется тест, который выполняет этот код для создания нового пользователя, он не работает и возвращает эту ошибку.
code: 'ER_BAD_FIELD_ERROR',
errno: 1054,
sqlMessage: 'Unknown column \'COUNTRY\' in \'field list\'',
sqlState: '42S22',
index: 0,
sql: 'insert into `USERS` (`ADDRESS`, `CITY`, `COUNTRY`, `EMAIL`, `NAME`, `PASSWORD`, `STATE`, `ZIP`) values (\'4909 Jean Manors\', \'New Parkerville\', \'Kiribati\', \'Matilde.Wiegand@hotmail.com\', \'Sarina_Anderson\', \'$2a$10$nsaL/4DyHquIlHKQOxjPiObBZJykbNlSZYCJCe0m3fREN4XD0c9o2\', \'Alaska\', \'01524\')' }
Когда я запускаю этот код SQL, хотя в CLI mysql он применяется без ошибок.
также, здесь находится раздел базы данных docker-compose
DB:
image: mysql:5.7
container_name: mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD=goon
- MYSQL_DATABASE=TERRA_TEST
- MYSQL_USER=tester
- MYSQL_PASSWORD=goon
- DATABASE_HOST=docker-mysql
ports:
- "3306:3306"
networks:
- web_sql_bridge
Кто-нибудь из вас может знать, почему возникают эти ошибки и как их исправить?Они начали происходить после докеризации проекта.До этого все тесты запускались без ошибок?