45

我正在使用Supertest和 Mocha 来测试使用 Node JS 开发的 API。

我想对 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: "a@b.nl"
    })
    .expect('Content-Type', /json/)
    .expect(500)
    .expect(anErrorCode('50086'))
    .end(done);
});

我可以使用默认设置的这些标头创建替代请求吗?

4

4 回答 4

43

如果我在超级代理中没记错的话,可以传递一个哈希来设置

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

让我知道它是否不适用于超测。

于 2014-05-18T20:11:17.663 回答
17

您可以使用通用例程将“默认”标头构建为对象并将它们传递给请求:

//# 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 /

于 2016-02-26T19:50:21.553 回答
8

superagent-defaults您可以按如下方式使用该库:

安装

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
  • 超级代理默认 v0.1.14
于 2017-10-12T22:11:05.947 回答
1

我用来做的是类似

首先,我创建一个配置文件来存储默认标头,

配置文件:

//# file: defaults.js
var defaults = { 
  l5dDtab: "SomeValue",
  xSignature: true,
  ... more headers here
}
module.exports = defaults;

然后,在我使用 supertest 的每个测试文件上,我这样做:

var defaults = require('./defaults.js');
var supertest = require('supertest');

var host = 'http://localhost:8080';
var request = supertest.agent(host)
            .set("l5d-dtab", defaults.l5dDtab)
            .set("X-Signature", defaults.xSignature);
var response = request.get("SomePath").set("AnotherLocalHeader", "Value");
于 2021-05-04T03:13:41.580 回答