【问题标题】:Mocha test is timing out on MEAN stackMocha 测试在 MEAN 堆栈上超时
【发布时间】: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


【解决方案1】:

看起来错误出现在我的事务模型中。在我确定的类别模型中

_id : {
    type : String
},

但在 transactionSchema 中没有做同样的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多