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