我目前正在开发几个利用Neo4J数据库的NodeJS API。我想在每个端点上进行自动化测试并确保一切正常(例如:POST用户应该在我的图形中使用预期的标签和属性创建节点用户)
作为一名初级开发人员我不确定从哪里开始。
我最初的想法是设置一个灯具Neo4j数据库(通过在void图上执行一个长密码查询来生成灯具数据)问题是这个灯具数据库会受到我做的不同测试的影响。对于Instance,如果我想测试DELETE端点,我将声明数据将被删除我的数据库。
我看到两个解决方案:
第一种解决方案似乎费力/耗时,而第二种解决方案似乎有点粗糙。也许我对自动化测试的概念确实是错误的。
以下是我所做的测试示例(使用mochajs和chai)我在哪里更改组织的管理员:
describe('UPDATE organisation', () => {
before((doneBefore) => {
const admin1 = updateOrganisationUtilities.createAdmin('[email protected]');
const admin2 = updateOrganisationUtilities.createAdmin('[email protected]');
Promise.all([admin1, admin2]).then(
(admins) => {
idAdmin = admins[0].id;
idAdmin2 = admins[1].id;
updateOrganisationUtilities.bindAdminToOrganisation(idAdmin, idOrganisation)
.then(() => {
doneBefore();
});
});
});
after((doneAfter) => {
Promise.all([
updateOrganisationUtilities.deleteExtraData(),
]).then(() => {
doneAfter();
});
});
it('Should update an organisation', (doneIt) => {
const req = {
method: 'PUT',
url: `/organisations/${idOrganisation}`,
payload: JSON.stringify({
name: 'organisation-test',
address: 'here',
trainingNumber: '15',
type: 'organisation.types.university',
expirationDate: new Date(),
idAdmin: idAdmin2,
}),
headers: {
authorization: token,
},
};
server.inject(req, (res) => {
assert.equal(res.statusCode, 200);
assert.exists(res.result.id);
assert.equal(res.result.address, 'here');
assert.equal(res.result.trainingNumber, '15');
assert.equal(res.result.type, 'organisation.types.university');
updateOrganisationUtilities.getLinkBetweenAdminAndOrga(res.result.id, idAdmin2)
.then((link) => {
assert.include(link, 'IS_ADMIN');
assert.include(link, 'ROLE');
doneIt();
});
});
});
});
如你看到的 :
它似乎有效,但我担心,当我有数百个可能改变数据库的测试时,它将成为PITA来维护这种结构。此外,我担心这种测试端点的方式会花费太多时间,因为我必须在每次端点测试之前和之后编写特定的函数/查询。
如果我的问题看起来很开放,我很抱歉,我非常好奇有经验的开发人员如何处理端点自动化测试。
为确保来自一个测试的意外更改不会影响另一个测试,您应该在每次测试后完全清空DB,并在每次测试之前创建适当的夹具。这不仅可以确保您使用所期望的数据进行测试,而且还可以使实施测试变得更加容易。