猫鼬正在改变 unix 时间戳并将其转换为 UTC 时间
Mongoose is altering unix timestamp and converting it to UTC time
我正在关注一个节点,快递教程。
这是补丁路线
app.patch('/todos/:id', (req, res) => {
var id = req.params.id;
var body = _.pick(req.body, ['text', 'completed']);
if (!ObjectID.isValid(id)) {
return res.status(404).send();
}
if (_.isBoolean(body.completed) && body.completed) {
body.completedAt = new Date().getTime();
} else {
body.completed = false;
body.completedAt = null;
}
Todo.findByIdAndUpdate(id, {$set: body}, {new: true}).then((todo) => {
if (!todo) {
return res.status(404).send();
}
res.send({todo});
}).catch((e) => {
res.status(400).send();
})
});
这是同一路线的测试套件:
it('should update the todo', (done) => {
var hexId = dummy[0]._id.toHexString();
var text = 'This should be the new text';
request(app)
.patch(`/todos/${hexId}`)
.send({
completed: true,
text
})
.expect(200)
.expect((res) => {
expect(res.body.todo.text).toBe(text);
expect(res.body.todo.completed).toBe(true);
expect(res.body.todo.completedAt).toBeA('number');
})
.end(done);
});
测试结果:
错误:预期“2017-07-12T18:38:11.814Z”为 'number'
最后一个测试用例失败,因为它正在从服务器接收 UTC 日期
而不是好的旧 unix 时间戳。但它不应该是时间戳,因为它是 new Date().getTime() 的结果吗?
我尝试从 body.completedAt() 和 todo.completedAt()路线.
body.completedAt() 返回一个 unix 时间戳,
而 todo.completedAt() 返回的是 UTC 时间。所以猫鼬似乎正在改变时间戳。但是我如何防止这种情况发生,以便最后一个测试用例通过。
我正在使用 expect 断言库
好吧,我太蠢了,没有检查我的 mongodb 模式:
测试用例失败,因为 completedAt 的类型设置为 Date
completedAt: {
type: Date,
default: null
}
应该是:
completedAt: {
type: Number,
default: null
}
我正在关注一个节点,快递教程。 这是补丁路线
app.patch('/todos/:id', (req, res) => {
var id = req.params.id;
var body = _.pick(req.body, ['text', 'completed']);
if (!ObjectID.isValid(id)) {
return res.status(404).send();
}
if (_.isBoolean(body.completed) && body.completed) {
body.completedAt = new Date().getTime();
} else {
body.completed = false;
body.completedAt = null;
}
Todo.findByIdAndUpdate(id, {$set: body}, {new: true}).then((todo) => {
if (!todo) {
return res.status(404).send();
}
res.send({todo});
}).catch((e) => {
res.status(400).send();
})
});
这是同一路线的测试套件:
it('should update the todo', (done) => {
var hexId = dummy[0]._id.toHexString();
var text = 'This should be the new text';
request(app)
.patch(`/todos/${hexId}`)
.send({
completed: true,
text
})
.expect(200)
.expect((res) => {
expect(res.body.todo.text).toBe(text);
expect(res.body.todo.completed).toBe(true);
expect(res.body.todo.completedAt).toBeA('number');
})
.end(done);
});
测试结果:
错误:预期“2017-07-12T18:38:11.814Z”为 'number'
最后一个测试用例失败,因为它正在从服务器接收 UTC 日期
而不是好的旧 unix 时间戳。但它不应该是时间戳,因为它是 new Date().getTime() 的结果吗?
我尝试从 body.completedAt() 和 todo.completedAt()路线.
body.completedAt() 返回一个 unix 时间戳,
而 todo.completedAt() 返回的是 UTC 时间。所以猫鼬似乎正在改变时间戳。但是我如何防止这种情况发生,以便最后一个测试用例通过。
我正在使用 expect 断言库
好吧,我太蠢了,没有检查我的 mongodb 模式: 测试用例失败,因为 completedAt 的类型设置为 Date
completedAt: {
type: Date,
default: null
}
应该是:
completedAt: {
type: Number,
default: null
}