【发布时间】:2016-08-12 14:15:52
【问题描述】:
我正在开发一个 MEAN 堆栈应用程序(使用教程作为指导),我的一个测试遇到了问题。当我运行下面的 mocha 测试时,它会超时。我试过延长计时器,但无济于事。我有另一个几乎相同但路线不同的测试。我检查了我的 api 文件以确保我有正确的 url。不知道这里发生了什么。
- express v4.12.3
- 摩卡v2.2.4
- gulp-mocha v2.0.1
- 超级代理 v1.2.0
- gulp v3.9.0
- 节点 v5.1.0
代码是:
describe('Transaction API', function() {
it('can load a transaction by id', function(done) {
// Create a single transaction
var TRANSACTION_ID = '001';
var transaction = {
name: 'LG2 G4',
_id: TRANSACTION_ID,
amount: 300
};
Transaction.create(transaction, function(error, doc) {
assert.ifError(error);
var url = URL_ROOT + '/transactions/id/' + TRANSACTION_ID;
superagent.get(url, function(error, res) {
assert.ifError(error);
var result;
// And make sure we got the LG G4 back
assert.doesNotThrow(function() {
result = JSON.parse(res.text);
});
assert.ok(result.transaction);
assert.equal(result.transaction._id, TRANSACTION_ID);
assert.equal(result.transaction.name, 'LG2 G4');
done();
});
});
});
});
这是我在 app.js 中的路线
api.get('/transactions/id/:id', wagner.invoke(function(Transactions) {
return function(req, res) {
Transactions.findOne({ _id: req.params.id },
handleOne.bind(null, 'transactions', res));
};
}));
function handleOne(property, res, error, result) {
if (error) {
return res.
status(status.INTERNAL_SERVER_ERROR).
json({ error: error.toString() });
}
if (!result) {
return res.
status(status.NOT_FOUND).
json({ error: 'Not found' });
}
var json = {};
json[property] = result;
res.json(json);
}
由于某种原因,这很好用。
api.get('/category/id/:id', wagner.invoke(function(Category) {
return function(req, res) {
Category.findOne({ _id: req.params.id },
handleOne.bind(null, 'category', res));
};
}));
【问题讨论】:
-
你能检查你传递给
superagent.get的回调是否被调用?尝试在回调中记录一些内容。 -
@DeendayalGarg 我得到这个 '{"error":"CastError: Cast to ObjectId failed for value \"001\" at path \"_id\""}'
-
是的,您需要在
Transactions.findOne中传递对象ID。因为_id是ObjectId 类型。您需要将req.params.id转换为 ObjectId。 -
你能告诉我为什么我上面的编辑有效,但是这不起作用吗?
-
默认情况下,mongo 会生成 ObjectId 类型的 _id 字段。因为您正在定义自己的字符串类型的 _id,并且您传递的是字符串类型的
req.params.id,所以它可以工作。
标签: node.js express mocha.js mean