【问题标题】:Why can I only check for "number" in postman tests, but for "integer" when testing against a schema?为什么我只能在邮递员测试中检查“数字”,而在针对模式进行测试时检查“整数”?
【发布时间】:2021-02-21 06:29:09
【问题描述】:

我想弄清楚,为什么我似乎不能写一个像这样的测试

pm.expect(responseBody.id).to.be.an("integer");

但显然必须使用“数字”。 测试失败并显示以下消息:

AssertionError: 预期 12345 为整数 不过,我确信它是一个整数。我也尝试过其他回复。

当我针对 id 类型为“整数”的模式测试响应时,它可以工作。

那么,我只能在 pm 测试中检查“数字”还是在这种情况下“数字”表示“整数”?

很遗憾,我在邮递员网站上没有找到任何有用的信息。任何帮助将不胜感激!

【问题讨论】:

    标签: json postman schema


    【解决方案1】:

    您不仅限于在测试中使用只是 ChaiJS getter/data-types 来检查整数。

    我不知道你的响应正文是什么样的,但我已经模拟了这个测试来展示你如何在期望语句中使用isInteger。这会返回一个true/false,因此可以这样断言:

    let test = { "number": 1234 };
    
    pm.test("Check is an Int - 'With isInteger'", function () {
        pm.expect(Number.isInteger(test.number), `Value: ${test.number} is a ${typeof test.number} and not a number`).to.be.true;
    });
    
    pm.test("Check is an Int - 'With a number'", function () {
        pm.expect(test.number).to.be.a("number");
    });
    

    【讨论】:

    • 如果数字确实是整数,则上述解决方案有效。不幸的是,如果不是(我已经用模拟服务器模拟了响应),测试会失败并显示一条相当不具体的消息,因为它试图在例如调用 isInteger一个字符串。
    • 第一个解决方案是首先将测试包装到 if 语句中以检查对象是否为数字。有没有更优雅的解决方案?
    • 如果它不是一个数字并且测试正在检查一个,它正在做它设计做的事情:D - pm.expect() 语句需要一个额外的参数,您可以在其中添加自定义消息。我已经更新了答案。
    猜你喜欢
    • 2020-10-10
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 1970-01-01
    相关资源
    最近更新 更多