16

結果として生じるアイテムの作成/削除をテストしようとしていました(mongoose経由のmongoDBで)。

作成が非同期で、コールバック関数で作成されたアイテムのIDを返すという問題、作成されたアイテムを削除するにはこのIDが必要なので、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);
        });
      });

    })
  });

});

そのようなテストはモカやジャスミンで実装できますか?

4

3 に答える 3

9

そのために2つのテストがあります。1 つは挿入をテストし、もう 1 つは削除をテストします。

コーヒースクリプトでは次のようになります

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
于 2012-07-13T12:03:40.187 に答える
4

この問題を参照してください: https://github.com/visionmedia/mocha/issues/438

テストを強制的に分離することが意図されているようです。不便で、より多くのモックが必要になる可能性がありますが、この動作は再テストが少なくて済み、正確に何が問題なのかをより明確に把握できるので便利です。

つまり、テスト A とテスト B の 2 つのテストがあり、B は A に依存しています。

テストAが壊れ、したがってBも壊れます。テスト A を壊しているものを修正しましたが、修正の過程で、または無関係な理由でテスト B が壊れていたことに驚くかもしれません。

テストが相互に依存していない場合、より良い情報が得られ、驚きが少なくなります。

于 2014-07-24T21:57:50.097 に答える
0

同様の問題があり、ネストされた記述/構造を試したところ、実際に機能しました。

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);
               });
            });
         });
      }); 
   });
});
于 2019-05-21T09:30:25.317 に答える