使用Supertest,我可以创建一个备用请求,默认设置一些标头吗?

Chr*_*eek 30 javascript mocha.js node.js express supertest

我正在使用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);
});
Run Code Online (Sandbox Code Playgroud)

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

mpm*_*mpm 29

如果我在superagent中正确记得,可以传递哈希来设置

.set({key:value,key2:value2})
Run Code Online (Sandbox Code Playgroud)

让我知道它是否与supertest不起作用.

  • 刚尝试过,它与Supertest一起工作.谢谢.现在我有一个对象存储在某处`var base = {'Authorization':'Token 1234567890','Content-Type':'application/json'};`并且每次新的测试我都会`.set(base)`.这节省了冗余的代码行.谢谢.希望找到设置默认标题的答案,并为我节省更多行.更新:实际上,这还不错.接受你的回答. (4认同)
  • 这适用于 superagent,但不适用于 supertest,例如 `supertest(app).set(...)` 不起作用。有没有办法访问 supertest 背后的代理来调用 .set() ? (4认同)

eno*_*l76 10

您可以使用公共例程将"默认"标头构建为对象,并将它们传递给请求:

//# 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;
Run Code Online (Sandbox Code Playgroud)

现在在你的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
  })

})
Run Code Online (Sandbox Code Playgroud)

此外,如果您需要让您的应用程序在运行时获取该令牌值(最有可能),请参阅本文以使用为测试生成的请求令牌值:https: //jaketrent.com/post/authenticated-supertest-tests /


mrk*_*von 5

您可以superagent-defaults如下使用库:

安装

npm install --save-dev supertest superagent-defaults
Run Code Online (Sandbox Code Playgroud)

用法

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
Run Code Online (Sandbox Code Playgroud)

  • 超级测试v3.0.0
  • 超级代理默认值v0.1.14