我目前正在研究几个确实利用Neo4J数据库的NodeJS API。我想在每个端点上进行自动化测试,并确保一切正常(例如:POST用户应在我的图形中使用期望的标签和属性创建节点用户)
作为一个初级开发人员,我不太确定从哪里开始。
我最初的想法是建立一个灯具Neo4j数据库(通过对将生成灯具数据的空图执行长密码查询) 问题是该灯具数据库将受到我所做的不同测试的影响。 对于实例,如果我要测试DELETE端点,则将断言将从数据库中删除数据。
我看到了两种解决方案:
在测试端点之前,我会生成一些所需的数据。但是后来我 测试后必须确保将其删除以免损害 固定装置,并影响其他端点测试。
在测试端点之前,我先清理数据库,执行夹具查询,然后执行第二个查询以添加一些额外数据来测试端点。然后,对于每个端点,请确保拥有一个干净的数据库,并最终包含一些额外的数据。
第一个解决方案似乎很费力/费时,而第二个解决方案似乎有点粗糙。也许我对自动化测试的想法是错误的。
这里是我做过的测试的一个示例(使用mochajs和chai),其中我更改了组织的管理员:
describe('UPDATE organisation', () => {
before((doneBefore) => {
const admin1 = updateOrganisationUtilities.createAdmin('admin@test.com');
const admin2 = updateOrganisationUtilities.createAdmin('admin2@test.com');
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。此外,我担心用这种方式测试端点会浪费太多时间,因为我必须在每次端点测试之前和之后编写特定的功能/查询。
很抱歉,我的问题似乎尚未解决,但我对有经验的开发人员如何处理端点自动测试感到非常好奇。
答案 0 :(得分:1)
为确保一项测试的意外更改不会影响另一项测试,应在每次测试后完全清空数据库,并在每次测试之前创建适当的夹具。这样不仅可以确保您正在使用期望的数据进行测试,还可以使测试的实施更加容易。