我正在使用Express / Sequelize使用3层体系结构来开发API应用程序,并且我想弄清楚测试每个层的位置。我已经阅读了很多关于每种测试类型(单元,集成,功能)的概念和定义,对我来说很明显,这些概念并不是每个人都同意的。
在控制器层中,我具有路由,而且我几乎可以确定在功能测试中测试了该层,在该测试中测试将真正使用API,并检查返回状态和主体。
我不确定其他测试层。 在服务层中,我拥有将与我的模型进行交互的所有业务逻辑和代码,例如一些伪代码:
static async createUserWithDefaultPermissions(attributes: Object) {
const user = await User.create(attributes);
defaultPermissions = ['login', 'list-users', 'change-password]; // initial permissions
defaultPermissions.forEach(permissions) {
// save UserPermission relation
}
return user;
}
目前,这非常简单,但是这里我将介绍所有业务逻辑。在我看来,这将在集成测试中进行测试,因为它取决于数据库。
最后,在数据访问层中,我有序列化定义的模型及其验证。我认为应该在这里进行单元测试。
我认为正确或完全迷失了吗?
除了要测试每个层之外,我也不知道要测试什么。现在,我认为在单元测试中,我应该测试所有模型验证规则,而无需接触数据库。例如,假设我的用户模型只有两个字段:
我将运行3个测试:
假设这是对的,我在集成测试中正在执行以下操作:
const user = await UserService.createUserWithDefaultPermissions({fakeUserAttributes});
const databaseUser = User.findByPk(user.id);
// if databaUser was found test pass
对吗?还是应该再次测试所有验证,例如尝试创建具有空登录名,空通行证等的用户?
在此事上希望获得一些指导