我正在使用笑话来测试用户功能(注册和登录)的API。
测试代码:
const request = require('supertest');
const app = require('../../app');
describe('Test User Functionality', () => {
test('User should be able to login', async done => {
const response = await request(app)
.post('/api/users/login')
.send({
email: 'test@test.com',
password: 'welcome1',
})
.expect(200);
done();
//expect(response.statusCode).toBe(200);
});
test('User should be able to signup', async done => {
const response = await request(app)
.post('/api/users/signup')
.send({
username: 'testuser',
email: 'test@test1.com',
password: 'welcome1',
})
.expect(200);
done();
//expect(response.statusCode).toBe(200);
});
});
如果我有一个测试,它可以正常工作,但是内部描述了多个测试,则显示超时错误。
下面是错误的屏幕截图:
我尝试添加超时,交换测试,但仍然没有成功。
任何人都请帮忙!
答案 0 :(得分:0)
在用异步请求测试我的react组件时遇到了同样的问题。
发生这种情况是因为您没有正确完成请求。
您可以轻松解决此问题。
选项1:将done
移动为expect
函数调用的第二个参数,如下所示。
const response = await request(app)
.post('/api/users/signup')
.send({
username: 'testuser',
email: 'test@test1.com',
password: 'welcome1',
})
.expect(200, done);
选项2:使用end
方法
const response = await request(app)
.post('/api/users/signup')
.send({
username: 'testuser',
email: 'test@test1.com',
password: 'welcome1',
})
.expect(200)
.end((err, res) => {
// do anything you want!
})
或者您可以签出文档(https://github.com/visionmedia/supertest#readme)!
答案 1 :(得分:0)
一个可能的问题可能是表达中间件。 要找出是否属于您的情况,您可以:
app.use(/* middleware */)
docs)注释所有中间件一旦发现超时的原因,就可以更进一步。 模拟导致问题的中间件的不同部分:
__mocks__
模拟第三方库
您的根目录并插入文件library_name.js
(这是
开玩笑的手动嘲笑:
documentation)app.use(Your.Middleware)
并在您的中间件文件中进行传递/** Possibly imports and some setup here */
// Make sure the function being called is mocked
export default {
Middleware: (req, res, next) => {
next();
},
}
(包含中间件的文件可能包含一些其他设置,这可能会导致问题。)
我的特殊情况:
我在中间件和Redis实例化文件中使用了ioredis
,它试图多次连接到商店,这导致了超时。
事实证明,主机名是错误的。解决该问题的关键是模拟中间件并找到额外的设置。然后Jest显示了另一个提示商店连接问题的错误。