在远程URL上重用Supertest测试

时间:2012-12-06 22:53:35

标签: node.js mocha supertest

我正在使用MochaJSSuperTest在开发过程中测试我的API并且非常喜欢它。

但是,在将代码推送到生产环境之前,我还希望将这些相同的测试用于远程测试我的临时服务器。

有没有办法通过远程URL或代理向远程URL提供请求?

以下是我使用的测试样本

        request(app)
        .get('/api/photo/' + photo._id)
        .set(apiKeyName, apiKey)
        .end(function(err, res) {
            if (err) throw err;
            if (res.body._id !== photo._id) throw Error('No _id found');
            done();
        });

3 个答案:

答案 0 :(得分:15)

我不确定你是否能用supertest做到这一点。你绝对可以用superagent来做。 Supertest建立在superagent之上。一个例子是:

var request = require('superagent');
var should = require('should');

var agent = request.agent();
var host = 'http://www.yourdomain.com'

describe('GET /', function() {
  it('should render the index page', function(done) {
    agent
      .get(host + '/')
      .end(function(err, res) {
        should.not.exist(err);
        res.should.have.status(200);
        done();
      })
  })
})

因此您无法直接使用现有测试。但他们非常相似。如果你添加

var app = require('../app.js');
通过更改host变量

,您可以轻松地在测试本地应用和远程服务器上的部署之间切换到测试的顶部
var host = 'http://localhost:3000';

编辑:

刚刚在docs#example

中找到了supertest的示例
request = request.bind(request, 'http://localhost:5555');  // add your url here

request.get('/').expect(200, function(err){
  console.log(err);
});

request.get('/').expect('heya', function(err){
  console.log(err);
});

答案 1 :(得分:2)

其他答案对我不起作用。

他们使用 .end(function(err, res) { 这对于任何异步 http 调用都是一个问题,需要使用 .then 代替:

示例工作代码如下:

<块引用>

文件:\test\rest.test.js

let request = require("supertest");
var assert = require("assert");

describe("Run tests", () => {
  request = request("http://localhost:3001");        // line must be here, change URL to yours

  it("get", async () => {

    request
      .get("/")                                      // update path to yours
      .expect(200)
      .then((response) => {                          // must be .then, not .end
        assert(response.body.data !== undefined);
      })
      .catch((err) => {
        assert(err === undefined);
      });

  });

});
<块引用>

文件:\package.json

"devDependencies": {
  "supertest": "^6.1.3",
  "mocha": "^8.3.0",
},
"scripts": {
  "test": "mocha"
}
<块引用>

安装并运行

npm i
npm test

答案 2 :(得分:0)

您已经提到了它,因为您定位的是远程URL,只需将应用替换为远程服务器URL

request('http://yourserverhere.com')
.get('/api/photo/' + photo._id)
.set(apiKeyName, apiKey)
.end(function(err, res) {
    if (err) throw err;
    if (res.body._id !== photo._id) throw Error('No _id found');
    done();
});