问题描述
我正在尝试为我的应用程序中的模块编写 API 测试。应用程序有一个用户和与该用户对应的文章,并且有文章的 GET、POST、DELETE 请求。
我通过为每个 GET、POST 等创建一个 describe
块来为这些请求编写测试用例,并且在每个块内,是我的测试。但问题是这些测试需要该用户的 key
才能知道它需要为哪个用户获取、创建和删除文章。目前,我已经对该密钥进行了硬编码,但我想为该文件中的所有测试创建一个新用户,并使用创建该用户时返回的密钥。然后在所有测试完成后删除用户。
基本上,它归结为在所有这些测试之前运行一个异步任务,并在所有测试中使用该任务的结果,并在所有测试完成后撤消该任务。我对后端 API 测试还很陌生,所以我不知道从哪里开始。任何帮助表示赞赏。
解决方法
经过几个小时的研究,我自己找到了答案。
创建一个 describe
块并在其中使用所有其他 describe
块。并使用钩子在测试前获取数据并在测试后将其清除。使用 this
关键字存储数据。
describe('Testing articles module',function () {
before(async function () {
const res = await createUser(); // Do whatever you want before running tests
this.myKey = res.body.key; // Store data using 'this'
});
after(async function () {
await deleteUser(); // Undo the action done in 'before' hook if you want
});
describe('Testing GET request',function () {
it('should return status 200',function () {
// You can use this.myKey here
// and inside all the tests in other describe blocks as well
});
});
describe('Testing POST request');
describe('Testing DELETE request');
});
顾名思义,after
和 before
是可用于在所有测试之前和之后执行某些操作的钩子。您可以在此处阅读更多信息:- Mocha hooks
此外,不要在这种情况下使用箭头函数,因为有 this
关键字,因为箭头函数没有 this
。它会导致问题。 Read about it here