22

我在开发过程中使用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();
        });
4

3 回答 3

26

我不确定你是否可以使用超测来做到这一点。你绝对可以用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);
});
于 2012-12-07T09:09:03.120 回答
13

您已经提到它,因为您的目标是远程 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();
});
于 2019-11-13T03:31:16.903 回答
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
于 2021-02-14T13:39:31.433 回答