gpt4 book ai didi

javascript - 使用异步 ajax 调用的 Sinon/Mocha 测试没有返回 promise

转载 作者:行者123 更新时间:2023-11-29 19:07:49 27 4
gpt4 key购买 nike

我正在为我的客户端 api 编写一些测试,将 karmaMochaSino 结合使用。但我一直坚持获取异步进程。

import api from '../../../src/api';
import stubData from '../data';
import axios from 'axios';

/* eslint-disable prefer-arrow-callback,func-names */
describe('API test', function () {
before(function () {
this.server = sinon.fakeServer.create();
});
after(function () {
this.server.restore();
});

it('Should return cart with provided token', function (done) {
this.server.respondWith("GET", "/cart",
[200, { "Content-Type": "application/json" },
'[{ "id": 12, "comment": "Hey there" }]']);

axios.get('/cart')
.then(function (response) {
console.log(response);
done();
})
.catch(function (error) {
console.log(error);
done();
});
this.server.respond();
});

});

出于某种原因,我总是收到 错误:超过 2000 毫秒的超时。对于异步测试和 Hook ,确保调用“done()”;如果返回一个 Promise,请确保它已解析。 来自 Mocha。似乎 axios.get() 之后的 then 没有被执行,因此 done 也没有被调用。

我确实遵循了Mocha 文档中的建议

describe('User', function() {
describe('#save()', function() {
it('should save without error', function(done) {
var user = new User('Luna');
user.save(function(err) {
if (err) done(err);
else done();
});
});
});
});

我是不是做错了什么?谢谢

最佳答案

似乎有一个open issue on sinon说它不适用于 axios,这里似乎就是这种情况。

Axios 实际上并没有调用您的假服务器。它似乎试图从字面上请求 /cart,这就是你超时的原因。

该用户将 fakeServer 替换为 another lib called nockmentions it here

还有其他库允许您模拟请求。

我通常使用supertest npm , Github .

来自 Github README 的例子

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

var app = express();

app.get('/user', function(req, res) {
res.status(200).json({ name: 'tobi' });
});

request(app)
.get('/user')
.expect('Content-Type', /json/)
.expect('Content-Length', '15')
.expect(200)
.end(function(err, res) {
if (err) throw err;
});

关于javascript - 使用异步 ajax 调用的 Sinon/Mocha 测试没有返回 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41516044/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com