supertest-as-promised中文文档|supertest-as-promised js中文教程|解析

npm npmdoc 3年前 (2021-10-25) 348次浏览

supertest-as-promised中文文档|supertest-as-promised js中文教程|解析

安装命令:npm i supertest-as-promised

承诺/A+标志

supertest-as-promised


构建状态

SuperTest as Promised使用一种方法增强 SuperTestthen

而不是在测试中的回调上分层回调:

request(app)
  .get("/user")
  .expect(200, function (err, res) {
    if (err) return done(err);
 
    var userId = res.body.id;
    request(app)
      .post("/kittens")
      .send({ userId: userId, ... })
      .expect(201, function (err, res) {
        if (err) return done(err);
 
        // ...
      });
  });

像承诺的那样链接您的请求:

return request(app)
  .get("/user")
  .expect(200)
  .then(function (res) {
    return request(app)
      .post("/kittens")
      .send({ userId: res})
      .expect(201);
  })
  .then(function (res) {
    // ...
  });

用法

SuperTest如许操作就像正常SuperTest,不同之处在于由返回的对象.get.post等是适当的thenable:

var express = require("express")
  , request = require("supertest-as-promised");
 
var app = express();
 
request(app)
  .get("/kittens")
  .expect(200)
  .then(function (res) {
    // ...
  });

如果您使用 promise-friendly 测试运行器,您可以只request从测试用例中返回您的链,而不是搞乱回调:

describe("GET /kittens", function () {
  it("should work", function () {
    return request(app).get("/kittens").expect(200);
  });
});

代理商

如果您使用 SuperTest 代理来保存 cookie,那么这些也可以:

var agent = require("supertest-as-promised").agent(app);
 
agent
  .get("/ugly-kitteh")
  .expect(404)
  .then(function () {
    // ...
  })

承诺的善良

首先,只公开thencatch方法。但是一旦你打过电话.then.catch一次,你就会得到一个适当的Bluebird承诺,支持所有承诺的善良:

request(app)
  .get("/kittens")
  .expect(201)
  .then(function (res) { /* ... */ })
  // I'm a real promise now!
  .catch(function (err) { /* ... */ })

有关可用的所有内容,请参阅Bluebird API

您可能会发现使用以下toPromise
方法
直接转换为 Promise 更简洁

request(app)
  .get("/kittens")
  .expect(201)
  .toPromise()
  // I'm a real promise now!
  .delay(10)
  .then(function (res) { /* ... */ })

BYOP:自带 Promise

您可以提供自己的承诺库,以便返回的承诺有您选择的方便方法。

只需使用符合 ES6 的Promise
构造函数
调用 SuperTest as Promised 模块,您就会得到一个配置为返回自定义承诺的新模块。要交换
when.js,例如:

var when = require("when")
  , request;
 
request = require("supertest-as-promised")(when.Promise);
request(app)
  .get("/when.js")
  .then(function (res) { /* ... */ })
  // I'm a when.js promise! (instanceof when.Promise == true)
  .frobulate()
 
request = require("supertest-as-promised");
request(app)
  .get("/bluebird.js")
  .then(function (res) { /* .. */ })
  // I'm back to the default Bluebird promise!

调试

假设你的时髦测试

it("should get kittens", function () {
  return request(app).get("/kittens").expect(200)
    .then(function (res) {
      return expect(res.body).to.equal("kittens r cute!");
    });
});

突然开始失败并出现“400 Bad Request”错误。如果您可以打印出响应正文以查看服务器是否提到了您的测试特别不好的地方,那肯定会很方便。链上 a
.catch并检查err.response

it("should get kittens", function () {
  return request(app).get("/kittens").expect(200)
    .then(function (res) {
      return expect(res.text).to.equal("kittens r cute!");
    })
    .catch(function (err) {
      console.log(err.response.text); // "You have viewed too many kittens today."
    });
});

安装

节点

$ npm install supertest supertest-as-promised

SuperTest as Promised 列出supertest作为
对等依赖项,因此它会将您要求的任何版本的 SuperTest 包装在您自己的package.json.

在早期版本的 NPM 中,如果没有将 SuperTest 作为依赖项列出,您将获得最新版本。在 NPM 3 中,未能将 SuperTest 列为依赖项将生成警告并且不会安装 SuperTest。

请注意,SuperTest as Promised 是一个行为良好的公民,不会直接对 SuperTest 进行猴子补丁:

// I return thenables!
var request = require("supertest-as-promised");
 
// I'm lame and force you to use callbacks
var request = require("supertest");

版本

我们遵循semver:主要版本号将随着任何重大更改而升级。下面列出了每个主要版本中的重大更改。请查阅
变更日志以获取每个版本中有意义的新功能列表;请查阅提交日志以获取完整列表。

4.0 中的重大变化

  • .catch处理程序中,err.response现在被标记为不可枚举。

3.0 中的重大变化

2.0 中的重大变化

项目贡献人员列表:


极客公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:supertest-as-promised中文文档|supertest-as-promised js中文教程|解析
喜欢 (0)
.excerpt .focus {display:none}