web-dev-qa-db-ja.com

Supertestを使用して、デフォルトで設定されたヘッダーを持つ代替リクエストを作成できますか?

Mochaで Supertest を使用して、Node JS。

そして、APIでさまざまなテストを行いたいです。それらのほとんどすべてについて、AuthorizationおよびContent-Typeヘッダーを再度設定する必要があります(このテストではAPIがそれらを必要とするため)。

it('Creation without an email address should fail and return error code 50040', function(done) {
  request
    .post('/mpl/entities')
    .set('Authorization', 'Token 1234567890') //set header for this test
    .set('Content-Type',  'application/json') //set header for this test
    .send({
      firstname: "test"
    })
    .expect('Content-Type', /json/)
    .expect(500)
    .expect(anErrorCode('50040'))
    .end(done);
});

it('Creation with a duplicate email address should fail and return error code 50086', function(done) {
  request
    .post('/mpl/entities')
    .set('Authorization', 'Token 1234567890') //<-- again
    .set('Content-Type',  'application/json') //<-- again, I'm getting tired
    .send({
      email: "[email protected]"
    })
    .expect('Content-Type', /json/)
    .expect(500)
    .expect(anErrorCode('50086'))
    .end(done);
});

これらのヘッダーをデフォルトで設定して、代替リクエストを作成できますか?

29

スーパーエージェントで正しく覚えていれば、ハッシュを渡して設定できます

.set({key:value,key2:value2})

スーパーテストで動作しない場合はお知らせください。

29
mpm

共通ルーチンを使用して、「デフォルト」ヘッダーをオブジェクトとして構築し、それらをリクエストに渡すことができます。

//# file:config.js

var config = { 
  authorization: { "Authorization":"authvalue" }
}

// Content-Type left out because supertest will use Content-Type json when you use the appropriate method

module.exports = config;

そして今、あなたのtest.jsで:

//# file:test.js

var request = require("supertest");
var config = require("./config");

request = request(config.baseUrl)
var commonHeaders = { "authorization":"TokenValueASDF" };

describe("testing", function() {
  it.should('present authorization header to server', function(done) {
    request.get('/someurl')
      .set(commonHeaders)
      .set({"X-TestSpecificHeader":"Value"})
      .expect(200,done) //if not authorized you'd get 401
  })

})

また、実行時にアプリでそのトークン値を取得する必要がある場合(ほとんどの場合)、テスト用に生成されたリクエストされたトークン値の使用については、この記事を参照してください: https://jaketrent.com/post/authenticated -supertest-tests /

10
enorl76

ライブラリを使用できます superagent-defaults 次のように:

installation

npm install --save-dev supertest superagent-defaults

使用法

var defaults = require('superagent-defaults');
var supertest = require('supertest');

var request = defaults(supertest(app)); // or url

// set the default headers
request.set(commonHeaders);

// use as usually

バージョン

  • スーパーテストv3.0.0
  • superagent-defaults v0.1.14
5
mrkvon