2016-04-20 2 views
0

Я работаю над применением стека MEAN (используя руководство для руководства), и у меня возникла проблема с одним из моих тестов. Когда я запускаю мокко-тест ниже, время истекает. Я пробовал продлить таймер, но безрезультатно. У меня есть еще один тест, который почти идентичен, но для другого маршрута. Я проверил файл api, чтобы убедиться, что у меня есть правильные URL-адреса. Не уверен, что здесь происходит.Тест Mocha синхронизируется со стеком MEAN

  • экспресс v4.12.3
  • Мокко v2.2.4
  • глотка-мокко v2.0.1
  • SuperAgent v1.2.0
  • глотка 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)); 
     }; 
})); 
+0

Вы можете проверить, вызван ли ваш обратный вызов на 'superagent.get'? попробуйте записать что-то внутри обратного вызова. –

+0

@DeendayalGarg Я получаю это '{"error": "CastError: Cast to ObjectId failed for value \" 001 \ "at path \" _ id \ ""}' – Alex

+0

Да, вам нужно передать идентификатор объекта в транзакции. findOne'. Поскольку '_id' имеет тип ObjectId. вам нужно скрывать 'req.params.id' ObjectId. –

ответ

0

Похож, что ошибка была в моей модели транзакций. В категории модели я определил

_id : { 
    type : String 
}, 

Но не сделал то же самое в транзакцииSchema.

Смежные вопросы