Подтвердить что ты не робот

Тесты на жасмин (мокка) вложенные "им"

Я пытался проверить последующее создание/удаление элементов (в mongoDB через mongoose).

Проблема создания async и возвращает идентификатор созданного элемента в функции обратного вызова, мне нужен этот идентификатор для удаления созданного элемента, поэтому я попробовал следующий код для mocha (по-разному), но он не работал.

describe('Item Model', function(){

  it('should be able to create item', function(done){
    var item = new Item({name: {first: "Alex"});
    item.save(function(err, data){

      it('should be able to deleted created item', function(done){                    
        Item.delete({_id: data.id}, function(err, data){
        done(err);
        });
      });

    })
  });

});

Может ли такой тест быть реализован в мокко или жасмине?

4b9b3361

Ответ 1

У меня было бы два теста для этого. Один, который является тестовой вставкой, и те, которые удаляют тесты.

Должен выглядеть примерно так в coffeescript

describe 'Item model', () ->
   item = ''
   before (done) ->
      item = new Item {name: {first: "Alex"}}
      done
    describe 'When inserting Item', () ->
        before (done) ->
            item.save done
        it 'should have been insterted' ->
            #CHECK HERE IT IF IT IS INSERTED

    decribe 'when deleting', () ->
        before (done) ->
            item.save (err,data) ->
                return done err if err
                Item.delete {_id: data.id}, done
        it 'should have been deleted' ->
            #CHECK HERE IT IF IT IS Deleted

Ответ 2

См. эту проблему: https://github.com/visionmedia/mocha/issues/438

Кажется, что намерение состоит в том, чтобы заставить тесты быть дезактивированными. Хотя это неудобно и, возможно, требует больше насмешек, это поведение полезно, потому что оно требует меньше повторного тестирования и дает более четкое представление о том, что происходит неправильно.

то есть. есть 2 теста, тест A и тест B, где B зависит от A.

Тест A прерывается, B также ломается. Вы исправите то, что нарушает тест A, но теперь может быть удивлено, обнаружив, что тест B сломался либо в процессе вашего исправления, либо по какой-то другой причине.

Когда тесты не опираются друг на друга, у вас есть лучшая информация и меньше сюрпризов.

Ответ 3

У меня была похожая проблема, и когда я попробовал вложенное описание/структуру, это действительно сработало.

describe('Item Model', () => {
   it('should be able to create item', done => {
      var item = new Item({name: {first: "Alex"});
      item.save(function(err, data){
         describe('Item Delete', () => {
            it('should be able to deleted created item', done => {
               Item.delete({_id: data.id}, function(err, data){
                 done(err);
               });
            });
         });
      }); 
   });
});