Javascript 使用Supertest,我可以创建一个默认设置了一些头的替代请求吗?

Javascript 使用Supertest,我可以创建一个默认设置了一些头的替代请求吗?,javascript,node.js,express,mocha.js,supertest,Javascript,Node.js,Express,Mocha.js,Supertest,我正在使用Mocha测试一个用NodeJS开发的API 我想对API做一系列不同的测试。对于几乎所有这些,我必须再次设置授权和内容类型头(因为API需要它们来进行此测试) it('没有电子邮件地址的创建应失败并返回错误代码50040',函数(完成){ 要求 .post(“/mpl/entities”) .set('Authorization','Token 1234567890')//设置此测试的标头 .set('Content-Type','application/json')//设置此测试的

我正在使用Mocha测试一个用NodeJS开发的API

我想对API做一系列不同的测试。对于几乎所有这些,我必须再次设置授权和内容类型头(因为API需要它们来进行此测试)

it('没有电子邮件地址的创建应失败并返回错误代码50040',函数(完成){
要求
.post(“/mpl/entities”)
.set('Authorization','Token 1234567890')//设置此测试的标头
.set('Content-Type','application/json')//设置此测试的标头
.发送({
名字:“测试”
})
.expect('Content-Type',/json/)
.预期(500)
.expect(一个错误代码('50040'))
.结束(完成);
});
它('创建一个重复的电子邮件地址应该失败并返回错误代码50086',函数(完成){
要求
.post(“/mpl/entities”)

.set('Authorization','Token 1234567890')/如果我在superagent中没有记错的话,可以将哈希传递给set

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

如果supertest无法使用,请告诉我。

您可以使用一个通用例程将“默认”头构建为对象,并将其传递给请求:

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

})
此外,如果您需要让应用程序在运行时(很可能)获取该令牌值,请参阅本文,了解如何使用为测试生成的请求令牌值:

您可以按如下方式使用库:

安装
npm安装--保存dev supertest superagent默认值
使用
var defaults=require('superagent-defaults');
var supertest=要求(“supertest”);
var请求=默认值(超级测试(应用));//或url
//设置默认标题
请求.set(commonHeaders);
//照常使用
版本
  • 超级测试v3.0.0
  • superagent默认值v0.1.14

我过去常做的事情

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

配置文件:

//# 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");

刚刚尝试过它,它可以与Supertest一起使用。谢谢。现在我在某个地方存储了一个对象
var base={'Authorization':'Token 1234567890','Content Type':'application/json'};
并且每次进行新的测试都
.set(base)
。这为我节省了多余的代码行。谢谢。希望找到设置默认标题的答案,并为我节省更多行。更新:实际上,这已经足够好了。接受你的答案。这适用于superagent,但不适用于supertest,例如
supertest(app)。set(…)
不起作用。是否有方法访问supertest背后的代理以在其上调用
.set()
?在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");