标签: supertest

如何用超级测试检查不存在的头字段?

如果我像这样设置express.js:

app.set("x-powered-by", false);
Run Code Online (Sandbox Code Playgroud)

如何测试这个?

.expect('X-Powered-By', '', done)
Run Code Online (Sandbox Code Playgroud)

会抛出错误:Error: expected "X-Powered-By" header field

.expect('X-Powered-By', null, done)
Run Code Online (Sandbox Code Playgroud)

也不行。

谢谢!

node.js express supertest

9
推荐指数
2
解决办法
5445
查看次数

如何使用 Supertest 对文件上传进行单元测试并发送令牌?

如何使用正在发送的令牌测试文件上传?我返回“0”而不是确认上传。

这是一个失败的测试:

var chai = require('chai');
var expect = chai.expect;
var config = require("../config");  // contains call to supertest and token info

  describe('Upload Endpoint', function (){

    it('Attach photos - should return 200 response & accepted text', function (done){
        this.timeout(15000);
        setTimeout(done, 15000);
        config.api.post('/customer/upload')
              .set('Accept', 'application.json')
              .send({"token": config.token})
              .field('vehicle_vin', "randomVIN")
              .attach('file', '/Users/moi/Desktop/unit_test_extravaganza/hardwork.jpg')

              .end(function(err, res) {
                   expect(res.body.ok).to.equal(true);
                   expect(res.body.result[0].web_link).to.exist;
               done();
           });
    });
});
Run Code Online (Sandbox Code Playgroud)

这是一个工作测试:

describe('Upload Endpoint - FL token ', function (){
   this.timeout(15000);
    it('Press Send w/out attaching photos returns error message', function (done){
    config.api.post('/customer/upload') …
Run Code Online (Sandbox Code Playgroud)

unit-testing mocha.js endpoint chai supertest

9
推荐指数
2
解决办法
1万
查看次数

如何使用 supertest 发送 formData 对象?

我刚刚开始学习使用 supertest 和 mocha 进行测试。我读过supertest的api文档,它说supertest支持superagent提供的所有较低级别的API。SuperAgent 说我们可以通过以下方式发送 formData 对象:

request.post('/user')
    .send(new FormData(document.getElementById('myForm')))
    .then(callback)
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用 supertest 发送 formData 对象时,如下所示:

server
    .post('/goal_model/images/' + userId + '/' + tmid)
    .set('Authorization',`Bearer ${token}`)
    .send(formData)
    .expect("Content-type",/json/)
    .expect(201)
    .end(function(err,res){
         should(res.status).equal(201);
         console.log(res.message);
         done();
    });
Run Code Online (Sandbox Code Playgroud)

其中 formData 是这样的:

let file;
let formData = new FormData();
let fn = "../../../Downloads/Images/5k.jpg";
formData.append("image", file);
Run Code Online (Sandbox Code Playgroud)

然后,当我尝试发送这个对象时,它只是说:

TypeError: "string" must be a string, Buffer, or ArrayBuffer
Run Code Online (Sandbox Code Playgroud)

是否可以通过这种方式发送 formData 对象?我做错了什么或者该怎么做?如果没有,为什么?我搜索了很多相关问题,但没有一个能解决我的问题。我现在真的很挣扎。

node.js superagent supertest

9
推荐指数
1
解决办法
8543
查看次数

在异步 Jest 测试中是否需要完成?

done()在 Jest 测试中与一位同事发生争执。

他在 JavaScript 方面的经验比我多几个数量级,我是在async/await被普遍接受之后加入的,加上来自 .NET 环境,所以我已经习惯了。

我写我的测试是这样的:

it("should return 200 OK for POST method", async () => {
    await request(app).post("SOMEENDPOINT")
      .attach("file", "file")
      .expect(200);
});
Run Code Online (Sandbox Code Playgroud)

他更习惯于承诺,所以会像这样编写他的测试:

it("should return 200 OK for POST method", (done) => {
  request(app).post("SOMEENDPOINT")
    .attach("file", "file")
    .expect(200, done);
});
Run Code Online (Sandbox Code Playgroud)

他对我推送到async/ 没问题await,但坚持我必须包含done,这样我要么做他的版本修改版本:

it("should return 200 OK for POST method", async (done) => {
  await request(app).post("SOMEENDPOINT")
    .attach("file", "file")
    .expect(200, done);
});
Run Code Online (Sandbox Code Playgroud)

或者:

it("should return 200 OK …
Run Code Online (Sandbox Code Playgroud)

javascript node.js async-await supertest jestjs

9
推荐指数
1
解决办法
4037
查看次数

使用Supertest和模拟数据库进行Express JS集成测试

是否可以使用supertest测试Express JS REST API,但用模拟数据库对象替换实际的数据库连接?我有单元测试,涵盖了数据库模型和应用程序的其他部分,以及API端点的功能测试,使得实际的数据库连接,但我有一个奇怪的要求,创建像功能测试但使用模拟数据库连接的集成测试.示例端点控制器如下:

  var model = require('../../../lib/models/list');

  module.exports = {
    index: function(req, res) {
      var data = { key: 'domains', table: 'demo.events'};

      var dataModel = new model(data);

      dataModel.query().then(function(results) {
        res.respond({data: results}, 200);
      }).fail(function(err) {
        console.log(err);
        res.respond({message: 'there was an error retrieving data'}, 500);
      });
    }
  };
Run Code Online (Sandbox Code Playgroud)

而URI的索引是

var express = require('express'), app, exports;
app = exports = module.exports = express();

exports.callbacks = require('./controller');

app.get('/', exports.callbacks.index);
Run Code Online (Sandbox Code Playgroud)

控制器中使用的列表模型连接到数据库并检索输出的数据.挑战是模拟实际的数据库调用,同时仍然使用supertest来发出请求并从URI中检索数据

任何信息都会有所帮助,包括你认为这是一个坏的或毫无意义的想法

javascript mocha.js node.js express supertest

8
推荐指数
1
解决办法
2314
查看次数

无法使用mocha和supertest测试DELETE方法

我正在尝试为节点应用程序构建RESTful API.我建立了路线,一切都运行良好.但是当我尝试测试它时,它无法使DELETE方法工作,尽管它正常工作而不是在测试中.

以下是服务器和测试的代码.服务器:

// set up 
var express     = require('express');
var app         = express(); // create our app w/ express   
var path        = __dirname; //root path    

// configuration 
app.configure(function() {
    app.use(express.static(path));
    //app.use(express.logger('dev')); // log every request to the console
    app.use(express.json());
    app.use(express.urlencoded());  // pull information from html in POST
    app.use(express.methodOverride());  // simulate DELETE and PUT
});

function start() {
    // routes 
    require('./app/routes.js')(app);
    // listen (start app with node server.js) 
    app.listen(process.env.PORT || 5000);
    console.log("Server listening for incoming conections..");
}

//************************
exports.start = …
Run Code Online (Sandbox Code Playgroud)

rest mocha.js node.js supertest

8
推荐指数
2
解决办法
1万
查看次数

超级测试,测试安全的REST API

我正在编写一个受API保护的REST API的集成测试jwt.一个API操作POST /user/token返回jwt给定的a username和a password,然后该令牌用于操作列表,例如:

GET /user/:id
Run Code Online (Sandbox Code Playgroud)

路由使用的位置jwt({secret: secret.secretToken}),因此令牌包含在http标头中Authorization.

使用超级测试进行测试时,我可以进行嵌套测试,但我想首先获取令牌,然后使用此令牌进行其他操作测试.

POST /user/token => 12345
GET /user/:id, `Authorization Bearer 12345`
GET /user/:foo, `Authorization Bearer 12345`
Run Code Online (Sandbox Code Playgroud)

如何避免为每个操作测试生成新令牌(见下文),但只使用一个由POST/user/token生成的令牌.

it('should get a valid token for user: user1', function(done) { 
  request(url)
    .post('/user/token')
    .send({ _id: user1._id, password: user1.password })
    .expect(200) // created
      .end(function(err, res) {
        // test operation GET /user/:id
Run Code Online (Sandbox Code Playgroud)

node.js jwt supertest express-jwt

8
推荐指数
1
解决办法
9959
查看次数

响应后访问Supertest中的"req"对象

在测试请求时/之后是否有任何方法可以直接访问req对象supertest?我想测试我的passport策略,所以我想检查一下req.user,req.session或许还有其他人.我知道我可以测试页面重定向或flash,因为这些是我的策略所做的,但是看看req对象上是否还有用户似乎很有用.如果我这样做,我还可以检查一次有多少用户.

我将使用"local-signup"策略对用户进行签名,该策略由此定义:

'use strict';

// get passport & mongoose
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var UserModel = require('mongoose').model('User');

module.exports = function() {

    // signup function
    passport.use('local-signup', new LocalStrategy({
            passReqToCallback: true // pass the entire request to the callback
        },

        function(req, username, password, done) {

            process.nextTick(function() {

            // find a user with the same username
                UserModel.findOne({username: username}, function(err, user) {

                    // if there is an error, …
Run Code Online (Sandbox Code Playgroud)

node.js express supertest passport.js

8
推荐指数
1
解决办法
2990
查看次数

玩笑/超级测试错误 - “instanceof”的右侧不可调用

当像这样使用超级测试时,

import app from "../../src/app";
import request from "supertest";

describe("GET / - a simple api endpoint", () => {
  it("Hello API Request", () => {
    const result = request(app)
    .get("/api/location/5eda6d195dd81b21a056bedb")
    .then((res) => {
      console.log(res);
    })
    // expect(result.text).toEqual("hello");
    // expect(result.status).toEqual(200);

  });
});
Run Code Online (Sandbox Code Playgroud)

我越来越"Right-hand side of 'instanceof' is not callable"

 at Response.toError (node_modules/superagent/lib/node/response.js:94:15)
      at ResponseBase._setStatusProperties (node_modules/superagent/lib/response-base.js:123:16)
      at new Response (node_modules/superagent/lib/node/response.js:41:8)
      at Test.Request._emitResponse (node_modules/superagent/lib/node/index.js:752:20)
      at node_modules/superagent/lib/node/index.js:916:38
      at IncomingMessage.<anonymous> (node_modules/superagent/lib/node/parsers/json.js:19:7)
      at processTicksAndRejections (internal/process/task_queues.js:84:21) {
          status: 500,
          text: `"Right-hand side of 'instanceof' is …
Run Code Online (Sandbox Code Playgroud)

express supertest

8
推荐指数
1
解决办法
7804
查看次数

当应用程序在端口 3000 上侦听时,玩笑测试失败,并显示“connect ECONNREFUSED 127.0.0.1:80”(express 和 supertest)

我正在努力使用超级测试解决我的笑话测试中的错误,我认为这是我的测试而不是我的代码的问题。

我的问题

我正在尝试使用 Node.js 和 Express、TDD 创建后端 API。我有以下文件来设置服务器:

//in app.js
const express = require('express');
const app = express();

app.post('api/1.0/users', (req, res) => {
  return res.send();
});

module.exports = app;

//in index.js
const app = require('./app');
const port = 3000;

app.listen(port, () => console.log(`listening on port: ${port}`));
Run Code Online (Sandbox Code Playgroud)

当我运行服务器时,它在端口 3000 上成功运行。但是,当我运行以下测试时:

//in UserRegister.test.js
const request = require('supertest');
const app = require('../app'); //this is in a __tests__ subdir hence '..'

it('returns 200 OK when sign-up request is valid', (done) => {
  request(app)
    .post('api/1.0/users') …
Run Code Online (Sandbox Code Playgroud)

node.js express supertest econnrefused jestjs

8
推荐指数
1
解决办法
1万
查看次数