0

API を提供しているこの KoaJS アプリケーションがあり、mocha/supertest を使用して API をテストしています。テストの 1 つは、API を介して oauth トークンを作成できることを確認することです。テストは次のようになります。

it('should be able to create a token for the current user by basic authentication', function(done) {
  request
  .post('/v1/authorizations')
  .auth('active.user', 'password')
  .expect(200)
  .expect({
    status: 'success',
    responseCode: 200,
    data: {
      data: [{
        id: 1,
        type: "access",
        token: "A2345678901234567890123456789012",
        userId: 1,
        note: null,
        oauthApplicationId: 1,
        createdTimestamp: "2014-04-17T23:17:06.000Z",
        updatedTimestamp: null,
        expiredTimestamp: null
      }]
    }
  }, done);
});

ここでの問題は、token と createdTimestamp が、テストを実行する前に判断できない値であることです。

応答をモックせずにこの状況をテストする最良の方法は何ですか (このテストで実際にデータベースにアクセスし、実行する必要があるため)?

4

1 に答える 1

5

そのため、スーパーエージェント.expectは、期待値を持つ基本的なケースでは素晴らしく便利ですが、このようなより高度なケースでは独自の期待値コードを書くことを恐れないでください。

var before = new Date().valueOf();
request.post('/v1/authorizations')
  //all your existing .expect() calls can remain here
  .end(function(error, res) {
    var createdTimestamp = new Date(res.body.data[0].createdTimestamp).valueOf();
    var delta = createdTimestamp - before;
    assert(delta > 0 && delta < 5000);
    done()
  });

トークンについては、それが存在することをアサートするだけで、正規表現に一致する文字列です。

于 2014-05-13T00:01:18.307 に答える