ava js 测试 GET returns 代码 204 POSTMAN GET returns 200
ava js test GET returns code 204 POSTMAN GET returns 200
我使用 koa js 2 和 postgres 数据库制作了一些 REST API 端点。
我有一个 setup/teardown 程序,它在 运行 进行任何测试之前 creates/drops 一个 postgres 数据库目录(例如 test_db)。 (我使用 npm script 'pretest' 挂钩来进行数据库设置,并使用 'posttest' 来进行数据库拆解)。
当我 运行 ava js 测试时,我有:
2 POST 测试(插入 2 行)- 这些都通过
1 GET 测试(例如获取 /users/1)- 失败:响应代码是 204 而不是 200
1 PUT 测试(例如 POST /users/:id)- 失败:响应代码是 204 而不是 200 。
我可以 运行 这些针对我的开发配置的测试,它们 所有 通过
不明白POST怎么能成功(插入一行到table)然后GET刚插入的行returns 204(无数据) .
目前测试数据库没有拆解,所以我可以查看测试数据库内部并验证 POSTS 是否成功,行插入了正确的 ID 值(如预期)。 (例如,我可以看到 id==1 的用户和 id==2 的用户)因此在执行测试时调用端点 /users/1 或 /users/2 应该会成功。
如果我使用测试数据库启动我的服务器,并且 运行 POSTMAN 针对这些端点和测试数据库,一切正常(例如 GET /users/1 returns正确 GET /users/2) 我得到 json 返回的代码是 200 而不是 204.
我不明白为什么我的 ava 测试在对 POSTMAN returns 代码 200 和有效 json 响应进行相同调用时会得到代码 204。
有什么可能导致这种情况的想法吗?
找到解决方案 - 我没有使用种子数据为数据库播种,并且由于 ava js 测试的并行性质,它们没有按顺序发生。
例如:我发生了 2 POST,然后是 GET(从上到下)
所以有两种解决方法:
- 带有数据的种子数据库作为预测试设置程序的一部分(DML 脚本)
或
- 在第一个 POST 测试之前放置一个 .before 以强制 POST 出现在 GET
之前
test.before('POST user (CREATE)', async t => {
而不是
test('POST user (CREATE)', async t => {
然后
test('GET single user', async t => { t.plan(3)
const res = await request(makeApp()) .get('/users/1')
然后你知道你的 GET :id 会成功(因为 POST 将强制发生在 GET /users/:id(或 GET /users/1)
之前
正如 ava js 文档所说:
"同时进行测试 运行 迫使您编写原子测试,意味着测试不不依赖于全局状态或其他测试的状态,这是一件好事!"
希望这对未来的用户有所帮助!
我使用 koa js 2 和 postgres 数据库制作了一些 REST API 端点。
我有一个 setup/teardown 程序,它在 运行 进行任何测试之前 creates/drops 一个 postgres 数据库目录(例如 test_db)。 (我使用 npm script 'pretest' 挂钩来进行数据库设置,并使用 'posttest' 来进行数据库拆解)。
当我 运行 ava js 测试时,我有:
2 POST 测试(插入 2 行)- 这些都通过
1 GET 测试(例如获取 /users/1)- 失败:响应代码是 204 而不是 200
1 PUT 测试(例如 POST /users/:id)- 失败:响应代码是 204 而不是 200 。
我可以 运行 这些针对我的开发配置的测试,它们 所有 通过
不明白POST怎么能成功(插入一行到table)然后GET刚插入的行returns 204(无数据) .
目前测试数据库没有拆解,所以我可以查看测试数据库内部并验证 POSTS 是否成功,行插入了正确的 ID 值(如预期)。 (例如,我可以看到 id==1 的用户和 id==2 的用户)因此在执行测试时调用端点 /users/1 或 /users/2 应该会成功。
如果我使用测试数据库启动我的服务器,并且 运行 POSTMAN 针对这些端点和测试数据库,一切正常(例如 GET /users/1 returns正确 GET /users/2) 我得到 json 返回的代码是 200 而不是 204.
我不明白为什么我的 ava 测试在对 POSTMAN returns 代码 200 和有效 json 响应进行相同调用时会得到代码 204。
有什么可能导致这种情况的想法吗?
找到解决方案 - 我没有使用种子数据为数据库播种,并且由于 ava js 测试的并行性质,它们没有按顺序发生。
例如:我发生了 2 POST,然后是 GET(从上到下)
所以有两种解决方法:
- 带有数据的种子数据库作为预测试设置程序的一部分(DML 脚本)
或
- 在第一个 POST 测试之前放置一个 .before 以强制 POST 出现在 GET 之前
test.before('POST user (CREATE)', async t => {
而不是
test('POST user (CREATE)', async t => {
然后
test('GET single user', async t => { t.plan(3)
const res = await request(makeApp()) .get('/users/1')
然后你知道你的 GET :id 会成功(因为 POST 将强制发生在 GET /users/:id(或 GET /users/1)
之前正如 ava js 文档所说:
"同时进行测试 运行 迫使您编写原子测试,意味着测试不不依赖于全局状态或其他测试的状态,这是一件好事!"
希望这对未来的用户有所帮助!