2013-08-01 3 views
1

Я пишу тесты для проверки того, что асинхронный процесс написал в манго, и у меня возникают проблемы с should.include, чтобы убедиться, что запись включена. Чтобы упростить это, мой прогноз включает только одно поле (ag_status), и я получаю следующее сообщение об ошибке от необходимо:Should.js не находит объект в массиве

1) Agriculture record should return at least one record with ag_status to true: 
    Uncaught AssertionError: expected [ { ag_status: true }, 
    { ag_status: true }, 
    { ag_status: true }, 
    { ag_status: true }, 
    { ag_status: true }, 
    { ag_status: true } ] to include an object equal to { ag_status: true } 

Вот фрагмент кода, который вызывает should.include. Я пробовал chai, chai-fuzzy и chai-вещи, но никто из них не работал (и не дает подробных сообщений, как должен), поэтому я застрял прямо сейчас. Любая помощь приветствуется.

it('Agriculture record should return at least one record with ag_status to true', function(done){ 
      MobAgriculture.model.find({ time_id: "AYearAgo" }, {_id: 0, ag_status: 1 }, function(err, result) { 
        should.not.exist(err); 
        should.exist(result); 
        result.should.have.length(6); 
        console.log(result); 
        var level2 = { "ag_status" : true }; 
        result.should.include(level2); 
        done(); 
       }); 

     }); 

ответ

0

Я не очень хорошо знаком с should.js, но я думаю, что вы должны использовать includeEql, как вы хотите, чтобы убедиться, что объект равным level2 присутствует в массиве, не то, что сам level2 находится там , От их docs:

включает в себя (объекте)

Утверждая, что данный OBJ присутствует через IndexOf(), так что это работает для строки, массивов, или пользовательских объектов, реализующих IndexOf.


includeEql (OBJ)

утверждающие, что объект равным данному OBJ присутствует в массиве:

+0

Это помогает, но я все еще получаю ошибку. Я добавил следующее: 'var level2 = {ag_status: true}; [{ag_status: true}, {ag_status: true}]. Should.includeEql (level2); result.should.includeEql (level2); ' Первый _should_ проходит, но второй _should_ все еще терпит неудачу. Таким образом, это то, что представляет собой мангуста. Но я не вижу в этом ничего видимого. Есть идеи? – frank

+0

@frankm Я вижу, что в вашем примере кода есть инструкция console.log, как выглядит вывод? Если вы скопируете результат из журнала и протестируете его, это сработает? – Mike

+0

вывод - это верхняя часть исходного сообщения, начинающаяся с «1) записи о сельском хозяйстве ....« Я пытался упростить тестовый пример _should_, поэтому я изменил проекцию мангуста, чтобы просто вывести '{ag_status: true} ». Итак, у моего массива вывода mongoose есть 6 элементов, и каждый из них «{ag_status: true}», а переменная, которую я ищу, - «{ag_status: true}». Тем временем я вернулся к сортировке результатов mongoose и вызвал «result [x] .should.include» для каждого элемента _x_ в массиве, который сейчас является прекрасным обходным решением. – frank