标签: supertest

超测多个 request.field 数组在服务器上未定义

我正在用 supertest 编写单元测试来测试我的服务器。但是我的一个包含一组 json 对象的 body 字段“到达”未定义。

编码:

//declaration of variable
tags = [{name: 'tag1'},{name: 'tag2'},{name: 'tag3'}];

//actual post
 agent.post('/pictures')
                .set('Connection', 'keep alive')
                .set('Content-Type', 'application/x-www-form-urlencoded')
                .field('picTitle', 'Picture Title')
                .field('tags', tags)
                .attach('file', __dirname + '/img/noel.jpg')
                .end(function(pictureSaveErr, pictureSaveRes) {
                   //do stuff
                }
Run Code Online (Sandbox Code Playgroud)

所以问题是服务器上的 req.body.tags 是未定义的。字符串没有问题。角度前端的实际实现运行良好,因此问题不在于服务器。

希望有人可以帮助我,在此先感谢...

arrays request mocha.js node.js supertest

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

Supertest + Express不会失败

这或多或少是supertest test express中间件的重复

但一年之后,我想我会开始一个新问题.

var express = require('express');
var request = require('supertest');

var app1 = express();    
app1.get('/myapp', function (req, res) {
  res.send(200, { name: 'myapp' });
});

request = request(app1);
it('should fail', function () {
  request
  .get('/hahahahahahahaha')
  .expect(123);
});
Run Code Online (Sandbox Code Playgroud)

据我所知,这将永远错误地通过.路径错误并且期望不同的状态代码这一事实无关紧要.

并且 - 更一般地说(没有Express),它看起来总是通过,也:

it('should fail', function () {
    request('http://thisdoesnotexist.mydomain')
        .get()
        .expect(200);
});
Run Code Online (Sandbox Code Playgroud)

这也不起作用:

it('should fail', function () {
    request('http://thisdoesnotexist.mydomain')
        .get()
        .expect(200)
        .end(function (err, res) {
            if (err) {
                throw err;
            }
    });
});
Run Code Online (Sandbox Code Playgroud)

有没有想过为什么会这样,或者如何实际测试这样的场景?

node.js express supertest

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

如何解决listen EADDRINUSE:地址已在集成测试中使用

我对 Nodejs 很陌生,我正在 udemy 上学习 Nodejs 课程,listen EADDRINUSE: address already in use :::4000在多次重新运行集成测试时我遇到了一些麻烦。第一次成功,但后来我在以下行中收到上述错误

\n\n
const server = app.listen(port, () => {winston.info(`Listening on port ${port}`)});\n
Run Code Online (Sandbox Code Playgroud)\n\n

我正在粘贴我的index.js和两个测试文件,如果有人能指出我,这对我来说将是一个很大的帮助。

\n\n

索引.js

\n\n
    const Joi = require("@hapi/joi");\n    Joi.objectId = require("joi-objectid")(Joi);\n    const winston = require("winston");\n    const express = require("express");\n    const app = express();\n\n    require("./startup/logging")();\n    require("./startup/config")();\n    require("./startup/dbconnectivity")();\n    require("./startup/routes")(app);\n    const port = process.env.port || 4000;\n    const server = app.listen(port, () => {winston.info(`Listening on port ${port}`)});\n    // exporting server object to be used in integration tests.\n …
Run Code Online (Sandbox Code Playgroud)

integration-testing node.js express supertest jestjs

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

如何检查 Jest 中 try/catch 块的错误

如果出现我确定 catch 会处理的错误,我如何在 Jest 中测试我的 try / catch 块?例如,我想测试此代码以从单独的文件中读取令牌。我想测试我的捕获,但问题是我不知道如何在 Jest 中创建一个情况来在 Jest 中处理错误。

const readToken = async () => {
try{
    const readFile = await fs.readFile('./apiData.json');
    const data = JSON.parse(readFile);
    
    return data.token;
    
}catch(err){
    throw err;
}
}
Run Code Online (Sandbox Code Playgroud)

这是我的 Jest 代码,但我认为工作不正确,因为在覆盖范围内显示带有 catch(err) 的行未被发现。

        it('should return catch error',async (done) => {
        try{
          
           await readToken()
            done()
        }catch(e){
          done(e);
        }
      })
Run Code Online (Sandbox Code Playgroud)

javascript try-catch node.js supertest jestjs

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

在这种情况下如何使用 Jest 测试 Express 路由器的 catch 分支?

我有一个包含两条路线的文件。

路线/ index.js

const express = require('express')
const router = express.Router()

router.get('', (req, res, next) => {
  try {
    res.status(200).render('../views/')
  } catch (error) {
    next(error)
  }
})

router.get('*', (req, res, next) => {
  try {
    res.status(404).render('../views/not-found')
  } catch (error) {
    next(error)
  }  
})

module.exports = router
Run Code Online (Sandbox Code Playgroud)

我想测试 catch 分支。一个明显的问题是我不能伪造 router.get 的回调做了什么,因为那样我的测试将毫无意义,我会修改我想要测试的东西。

我可以向这些特定路由发送 Supertest 请求,但随后我无法控制会发生什么。我想避免创建硬编码路由,只是为了检查下一个函数是否调用了中间件。如果我理解正确,如果我会在 try 块中发生其他事情(如数据库查询),那么我可以模拟以引发错误。

但我没有在那里发生任何额外的事情。这是我无法理解的:如果我模拟服务器所做的事情,那么我不会测试我已经拥有的东西,而是其他东西,所以这样做没有意义。也许我误解了事情是如何工作的,但据我所知,唯一的选择是以某种方式模拟 res.status 或 res.render 的作用(存根它们以便它们抛出错误),所以以某种方式模拟 Supertest 的作用,但我不知道该怎么做。

任何帮助将不胜感激!

javascript node.js express supertest jestjs

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

使用 mocha/supertest 测试随机值

我有一个提供 API 的 KoaJS 应用程序,我正在使用 mocha/supertest 来测试 API。其中一项测试是确保您可以通过 API 创建 oauth 令牌。测试看起来像这样:

it('should be able to create a token for the current user by basic authentication', function(done) {
  request
  .post('/v1/authorizations')
  .auth('active.user', 'password')
  .expect(200)
  .expect({
    status: 'success',
    responseCode: 200,
    data: {
      data: [{
        id: 1,
        type: "access",
        token: "A2345678901234567890123456789012",
        userId: 1,
        note: null,
        oauthApplicationId: 1,
        createdTimestamp: "2014-04-17T23:17:06.000Z",
        updatedTimestamp: null,
        expiredTimestamp: null
      }]
    }
  }, done);
});
Run Code Online (Sandbox Code Playgroud)

这里的问题是 token 和 createdTimestamp 是我在执行测试之前无法确定的值。

在不模拟响应的情况下测试这种情况的最佳方法是什么(因为我希望这个测试实际命中数据库并且需要这样做)?

testing node.js supertest koa

0
推荐指数
1
解决办法
1290
查看次数