ava js test GET返回代码204 POSTMAN GET返回200

时间:2017-03-29 21:35:09

标签: postgresql npm postman ava koa2

我使用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。

关于可能导致这种情况的任何想法?

1 个答案:

答案 0 :(得分:1)

找到了解决方案 - 我没有使用种子数据对种子数据库进行种子处理,并且由于ava js测试的并行性质,它们没有按顺序发生。

例如:我发生了2次POST,然后是GET(从上到下)

所以有2个解决方案:

  1. 种子数据库,数据作为预测试设置程序(DML脚本)的一部分
  2. OR

    1. 在第一次POST测试之前放置。强制POST出现在GET
    2. 之前
        

      测试。之前('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文档所说:

      让测试并发运行 强制您编写原子测试意味着测试不依赖于全局状态或其他测试的状态,这是太好了!

      希望这对未来的用户有帮助!