supertest 测试端点发送标头后的操作

问题描述

我有一个端点,可以在发送响应标头后执行任务。像这样:

// util.js
exports.utilMethod = function() {}


// endpoint.js
const { utilMethod } = require('./util');

app.post(
  '/endpoint',function(req,res) {
    res.status(200).json({ done: true });
    someAsyncCall().then(function() {
      utilMethod();
    });
  }
);

//endpoint_spec.js
const util = require('./util');
const endpoint = require('./endpoint');
const utilStub = sinon.stub(util,'utilMethod');
const express = require('express');
const request = require('supertest');
const chai = require('chai');
const { expect } = chai;
const app = express();

app.use('/endpoint',endpoint);

describe('/endpoint',function() {
  it('invokes `utilMethod`'',function(done) {
    request(app)
      .post('/endpoint')
      .send({ data: 'test' })
      .set('Accept','application/json')
      .expect('Content-Type',/json/)
      .expect(200)
      .end(function() {
        expect(utilStub.called).to.eql(true);
        done();
      });
  });
});

expect 失败

      Uncaught AssertionError: expected false to deeply equal true
      + expected - actual                                                                         
       
      -false                                        
      +true                                                     

我已将日志语句放在 utilMethod 中并确认它确实被调用了,但测试在端点响应之后立即运行,也就是在调用 utilMethod 之前。有没有办法解决这个问题?我正在使用 mocha、chai 和 supertest。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...