我有一个运行了一组Mocha测试的express.js应用程序。在不久前的某个时刻,我完成了这个项目。停靠后,由于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,
});
});
}在这里,它提供了将新用户添加到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\')' }当我在mysql CLI中运行这段SQL代码时,它的应用没有错误。
另外,这里是docker-compose的DB部分
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你们中是否有人知道为什么会发生这些错误,以及如何修复它们?它们是在项目停靠后开始发生的。在它运行所有测试都没有错误之前?
发布于 2018-06-14 17:47:31
如果问题是在docker之后开始的,也许您实际上是在运行迁移到本地数据库,并在docker内部针对DB运行应用程序。
无论如何,问题目前没有足够的安装信息来给出明确的答案。如果您在问题中添加了更多信息,请ping,我将更新答案。
我们需要知道你是如何运行你的dockerized设置的。您是如何运行迁移的。您是否有本地mysql安装和docker mysql服务器同时运行。您是否在某个时刻停止了容器(因此会因迁移而丢失数据设置)。基本上完整的代码来再现你的问题将是必要的。
https://stackoverflow.com/questions/50769582
复制相似问题