16

API 呼び出しを行うときに、返された JSON の結果を検査したいと考えています。本文と一部の静的データが適切にチェックされていることがわかりますが、正規表現を使用する場所はどこでも壊れています。これが私のテストの例です:

describe('get user', function() {

    it('should return 204 with expected JSON', function(done) {
      oauth.passwordToken({
        'username': config.username,
        'password': config.password,
        'client_id': config.client_id,
        'client_secret': config.client_secret,
        'grant_type': 'password'
      }, function(body) {
        request(config.api_endpoint)
        .get('/users/me')
        .set('authorization', 'Bearer ' + body.access_token)
        .expect(200)
        .expect({
          "id": /\d{10}/,
          "email": "qa_test+apitest@example.com",
          "registered": /./,
          "first_name": "",
          "last_name": ""
        })
        .end(function(err, res) {
          if (err) return done(err);
          done();
        });
      });
    });
  });

出力のイメージを次に示します。

ここに画像の説明を入力

json ボディ応答のパターン マッチングに正規表現を使用するアイデアはありますか?

4

4 に答える 4

7

テストでは、JSON スキーマと実際に返される値の 2 つを考慮する必要があります。JSON 形式を検証するための「パターン マッチング」を本当に探している場合は、Chai の chai-json-schema ( http://chaijs.com/plugins/chai-json-schema ) を参照することをお勧めします。 / )。

JSON スキーマ v4 ( http://json-schema.org ) をサポートしているため、JSON 形式をより厳密で読みやすい方法で記述することができます。

この質問の特定のケースでは、次のようにスキーマを使用できます。

{
    "type": "object",
    "required": ["id", "email", "registered", "first_name", "last_name"]
    "items": {
        "id": { "type": "integer" },
        "email": { 
            "type": "string",
            "pattern": "email"
        },
        "registered": { 
            "type": "string",
            "pattern": "date-time"
        },
        "first_name": { "type": "string" },
        "last_name": { "type": "string" }
    }

}

その後:

expect(response.body).to.be.jsonSchema({...});

おまけとして、JSON スキーマは正規表現をサポートしています

于 2016-05-06T11:56:14.790 に答える
0

chai は過度に冗長な構文を使用していると思います。

var assert = require('assert');
        //...
        .expect(200)
        .expect(function(res) {
            assert(~~res.body.id);
        })
        //...
于 2015-04-29T12:46:48.883 に答える