使用 jasmine-node / frisby 访问 JSON 值

Accessing JSON values with jasmine-node / frisby

本文关键字:JSON 访问 frisby jasmine-node 使用      更新时间:2023-09-26

我正在尝试构建一个测试,该测试将验证收到的错误消息,以验证收到的错误消息,以用于对API的错误请求。我正在使用node-jasmine和frisby来编写测试,但在使用点表示法访问JSON值时遇到问题。

 var frisby = require('frisby');
    frisby.create('JSON Error')
      .put('url', {
      }, {json: true})
      .expectStatus(400)
      .expectHeaderContains('content-type', 'application/json')
      .auth('username', 'password')
      .afterJSON(function (body) {
        //changed values
        expect(body.error.newEmail).toMatch('missing-required-key'),
        expect(body.error.oldEmail).toMatch('missing-required-key')
      })
    .toss();

预期的 JSON 响应正文

{
"error": {
"newEmail": "missing-required-key",
"oldEmail": "missing-required-key"
}
}

测试结果出现以下错误:

Cannot read property newEmail of undefined

我在 Postman 中编写了一个类似的测试,它有效,我正在尝试将这些测试转换为 node.js 可以使用的东西。

邮递员工作示例:

var body = JSON.parse(responseBody);
//error messages
var newEmailError = body.error.newEmail;
var oldEmailError = body.error.oldEmail;
tests["New Email Error Message"] = newEmailError === "missing-required-key";
tests["Old Email Error Message"] = oldEmailError === "missing-required-key";

事实证明提供的端点不正确,测试对正确的端点有效!

你也需要这样做:

frisby.create('GET JSON data with parameters')
    .get('your_json_url.com')
    .expectStatus(200)
    .expectHeader('Content-Type', 'application/json')
    .expectJSON({ 'error': {
            'newEmail': 'missing-required-key'
        }})
    .toss();