标签: supertest

如何测试呈现视图的 Express Routes

我在尝试使用 SuperTest 测试一些 Express Routes 时遇到了一些困难。

// Mocha test
  ..
  request(app)
    .get('/user')
    .expect(200)
    .end(function(err, res){
      if (err) return done(err);
     done()
  });
  ...

// Router 
  app.get('/user', function(req, res){
    res.render('user.jade');
  });
Run Code Online (Sandbox Code Playgroud)

当我使用浏览器手动测试路由器时,路由器工作正常,并呈现 jade 模板视图,但是当我运行 mocha 测试时,它失败并显示“未捕获的预期假为真”。Express 将请求记录为成功 (200),但测试仍显示为失败并显示错误消息。

我曾尝试对 SuperTest 段使用不同的代码习语、不同的 jade 模板,而且似乎只在我第一次在呈现模板的路由器上运行测试时发生。即使在相同的路由器和模板上使用 GET 进行以下测试也成功???

已尝试使用路由器查找代码示例,但未成功呈现视图,所以这可能是不受支持的情况?

javascript node.js express supertest

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

在快速响应对象上获取 cookie 数据?

我只是在做一些 API 测试,并且试图验证发送下来的 cookie 数据是否正确,但是我找不到任何有关从响应对象获取 cookie 的文档,只能从请求中获取 cookie。

那么有没有一种快速的方法可以像处理请求一样执行此操作req.cookies["myCookie"],我知道我可以获取标头并从那里获取 set-cookie,但尝试从那里手动解析 cookie 数据有点混乱。

cookies node.js express supertest

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

sails.js + mocha + supertest + sinon:如何存根sails.js 控制器函数

我试图存根一个风帆控制器函数,但我不知道存根哪个对象。使用 sinon.stub(object,'funcname', function()...

这可能与sails绑定控制器功能的方式有关......

这是一些示例代码

控制器文件 api/controllers/PersonController.js

var fs = require('fs');

//
// I want to stub retrieveData function when testing
//
function retreiveData(cb) {
    fs.readFile('./filedata', function (err, data) {
        if (err) throw err;
        cb(data.toString());
    });
};
function showdata(req, res) {
    var stack = new Error().stack
    console.log( stack )

    retreiveData(function (data) {
        res.send(data);
    });
};
module.exports = {
  showdata: showdata,
  retreiveData: retreiveData
};
Run Code Online (Sandbox Code Playgroud)

测试文件:

var request = require('supertest');
var sinon = require('sinon');
describe('GET /person/showdata', function() {
    it('should return …
Run Code Online (Sandbox Code Playgroud)

mocha.js node.js sinon supertest sails.js

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

使用“supertest”进行测试期间的 Express 中间件控制台输出

这个中间件在 Supertest 中运行时没有出现:

app.use((err, req, res, next) => {
  // WHY DOES Supertest NOT SHOW THIS ERROR??
  console.log("error: ", err.message);
  res.status(422).send({ error: err.message });
});
Run Code Online (Sandbox Code Playgroud)

我只是花了一些愚蠢的时间试图找到这个错误:

Driver.findByIdAndDelete(driverId) // Remove NOT Delete
  .then(driver => {
    res.status(204).send(driver)
})
...
Run Code Online (Sandbox Code Playgroud)

在使用 Postman 时,中间件正确地将错误显示为对正文的响应,但在运行测试时却没有。

我打开了 2 个终端窗口,运行 npm run:test并且start在运行 Postman 之前,这里没有任何帮助。

即使在运行 Supertest 时,有没有办法访问此日志输出?

包.json:

"dependencies": {
    "body-parser": "^1.17.1",
    "express": "^4.15.2",
    "mocha": "^3.2.0",
    "mongoose": "^4.8.6"
  },
  "devDependencies": {
    "nodemon": "^1.11.0",
    "supertest": "^3.0.0"
  }
Run Code Online (Sandbox Code Playgroud)

mocha.js node.js express supertest

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

Mocha 和 Supertest 有什么区别?

我是 NodeJs 初学者。无论如何,我想创建一个从测试开始的应用程序,比如 TDD 方法。

Mocha 和 Supertest 有什么区别?

tdd mocha.js node.js supertest

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

测试后关闭服务器和数据库连接

我有带有 mongo 连接的 koa 服务器,并使用 supertest 来模拟服务器并发送请求,开玩笑作为测试框架。

const app = new Koa()
...
export default app.listen(PORT, (err) => {
  if (err) console.log(err)

  if (!IS_TEST) {
    console.log(`Server running on port: ${PORT}`)
  }
})
Run Code Online (Sandbox Code Playgroud)

成功完成测试或失败服务器连接钢工作后,测试后如何关闭koa服务器连接?

测试示例:

import supertest from 'supertest'
import mongoose from 'mongoose'
import server from '../../../app/server'
import User from '../../../app/models/user'

const r = supertest.agent(server.listen())

afterEach(async (done) => {
  await mongoose.connection.db.dropDatabase()
  done()
})

describe('Authorization', () => {
  describe('POST /signup', () => {
    const userData = {
      email: 'test@test.com',
      password: 111111,
    } …
Run Code Online (Sandbox Code Playgroud)

javascript node.js supertest koa jestjs

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

使用 cookieSession 使用 Supertest 进行测试时,Passport 不会设置 req.user

我在使用 Express 的“cookieSession”使用 Supertest 测试 Express 应用程序时遇到问题。当我session从 Express使用时,一切正常,但cookieSession不能正确使用 PassportJS。

我正在使用 PassportJS 对用户进行身份验证并将用户设置为请求对象 (req.user)。所以/login按预期工作,它返回正确的set-cookie标头,但在下一个请求中,身份验证失败req.user,即使它正确反序列化/序列化用户,也不会使用用户对象设置属性

环境

版本:

  • 快递:4.16.2
  • PassportJS:0.3.2
  • 超级测试:2.0.1
  • 超级代理:2.3.0

这就是我初始化超级代理的方式:

import * as supertest from 'supertest';
import * as superagent from 'superagent';
import app from '../../app';
const request = supertest.agent(app);
Run Code Online (Sandbox Code Playgroud)

我在测试之前运行登录(使用异步/等待功能):

await request.post('/login').send({
  email: 'some@email.com',
  password: 'plainpassword'
});
Run Code Online (Sandbox Code Playgroud)

然后我向后端发出第一个请求以检索数据:

const readResponse: superagent.Response = await             
request.post('/getData').send(requestBody);
Run Code Online (Sandbox Code Playgroud)

这就是它失败的地方。它返回状态代码 401,因为 PassportJS 不提供用户数据来请求对象。也许它不在 req.user 中?

在 app.ts 中,我像这样设置了 cookieSession 和passportJS 会话:

app.use(cookieSession({
  keys: [process.env.SESSION_SECRET], …
Run Code Online (Sandbox Code Playgroud)

node.js express supertest passport.js

5
推荐指数
0
解决办法
593
查看次数

server.close 不是一个函数

我有一个用于测试的 jest supertest 设置,我试图在测试完成后关闭服务器,但它抛出错误,它说 server.close() 不是一个函数。这里有什么问题?是 express 还是 jest 还是 supertest 的问题我无法弄清楚我是测试新手,请帮助我。server.js 文件:

const next = require('next');
const express = require('express');
const winston = require("winston");
const config = require("config");
const passport = require('passport');
const flash    = require('connect-flash');
const path = require('path');
var cookieSession = require('cookie-session');
const cookieParser = require('cookie-parser');

var app = express();



const dev = process.env.NODE_ENV !== 'production';
const nextApp = next({dev});
const port =  process.env.PORT || config.get("port");
const handleRequest = nextApp.getRequestHandler();


nextApp.prepare().then(() => {



    require("./server/startup/cors")(app);
    require("./server/startup/db")();

    app.use(cookieParser('ilovescotchscotchyscotchscotch'));
    app.use(express.json()); …
Run Code Online (Sandbox Code Playgroud)

express supertest jestjs

5
推荐指数
2
解决办法
3927
查看次数

使用 Jest 和 supertest 测试响应体

我有一个简单的快速 http 服务器,它在向 / 发出 get 时返回“Hello worl”

我有以下测试:

import request from 'supertest';
import app from '../app/app';

test('test http server', async () => {
  const res = await request(app).get('/')
  expect(res.body).toEqual('Hello world');
});
Run Code Online (Sandbox Code Playgroud)

测试失败是这样的:

? test http server
expect(received).toEqual(expected)
Expected: "Hello world"
Received: {}
   7 |   const res = await request(app).get('/')
   8 | 
>  9 |   expect(res.body).toEqual('Hello world');
Run Code Online (Sandbox Code Playgroud)

如何将 response.body 作为文本获取以进行检查?

express supertest jestjs

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

在 Jest 中测试失败时如何打印请求和响应?

我正在使用 Supertest 和 Jest 来测试 Node.js API。

示例测试具有以下格式

it('Read a note for a user', (done) => {
      request(graphqlURL)
        .post('/graphql')
        .set(baseHeaders())
        .send({
          query: graphQLQuery
        })
        .end((err, res) => {
          expect(res.status).toBe(200);          
          done();
        })

    });
Run Code Online (Sandbox Code Playgroud)

当前,当期望失败时,会记录以下内容

expect(received).toBe(expected) // Object.is equality

    Expected: 200
    Received: 404

Run Code Online (Sandbox Code Playgroud)

我还想在失败的测试旁边记录请求和响应,以便在调试时获得更多上下文。

有没有办法打印那些,仅用于失败的测试?

node.js supertest jestjs

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

标签 统计

supertest ×10

node.js ×8

express ×6

jestjs ×4

mocha.js ×3

javascript ×2

cookies ×1

koa ×1

passport.js ×1

sails.js ×1

sinon ×1

tdd ×1