gpt4 book ai didi

node.js - 在express api中返回时,mongoose中_id的类型错误

转载 作者:太空宇宙 更新时间:2023-11-03 23:37:47 25 4
gpt4 key购买 nike

我已经设置了一个简单的测试( Mocha 和应该),并且我正在测试我保存的报告是否与我得到的报告相同。我更喜欢使用 deep.equal 但由于 _id 不等于我陷入困境。

var report = new Report();

describe('GET:id /api/reports', function () {

beforeEach(function (done) {
report.save(function (err, result) {
if (err) return (done(err));
result._id.should.eql(report._id);
done();
});
});

afterEach(function (done) {
Report.remove().exec().then(function () {
done();
});
});

before(function (done) {
Report.remove().exec().then(function () {
done();
});
});


it('should respond with the same report saved', function (done) {
request(app)
.get('/api/reports/' + report._id)
.expect(200)
.expect('Content-Type', /json/)
.end(function (err, res) {
if (err) return done(err);
console.log(JSON.stringify(res.body));
console.log(JSON.stringify(report));
res.body._id.should.equal(report._id);

done();
});
});
});

我得到的输出是

    {"_id":"55282d42cb39c43c0e4421e1","__v":0}
{"__v":0,"_id":"55282d42cb39c43c0e4421e1"}

1) GET:id /api/reports should respond with the same report saved:
Uncaught AssertionError: expected '55282d42cb39c43c0e4421e1' to be 55282d42cb39c43c0e4421e1

如果我改用 == 它工作正常

(res.body._id == report._id).should.equal(true);

我最终想要的是 res.body (或其他与此相关的东西)深度等于初始报告。

最佳答案

假设您是 /api/reports/:id 的 Express 路由处理程序,使用 res.json() 发送报告, Mongoose 文档的问题是“字符串化”。当 mongoose 文档被字符串化时,ObjectId 会被类型转换为字符串,当解析回对象时,字符串不会自动转换回 ObjectId。

因此,如果您希望原始 Report 文档与 Express 返回的文档“深度相等”,则需要将其提交到相同的“转换过程”。该断言看起来像这样。

res.body.should.eql(JSON.parse(JSON.stringify(report)));

希望这对您有用。

关于node.js - 在express api中返回时,mongoose中_id的类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29569932/

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