2017-10-04 2 views
0

포스트 후크에 대한 테스트를 작성하려고합니다. user이 저장되면 별도의 컬렉션에 몇 가지 추가 정보가 저장됩니다. 세부 정보가 두 번째 컬렉션에 저장되는지 여부를 확인하려고합니다. 후크가 비동기 적으로 실행되면서 확인할 수 없습니다.런타임시 미들웨어 후크를 제거하는 방법은 무엇입니까?

userSchema.post('save', function(user, next){ 
    var filter = new filterModel({name: user.name}); 
    filter.save().then(()=>next()); 
}); 

제 테스트에서는 첫 번째 후크를 실행하는 새 후크를 추가 할 생각이었습니다. 여기서는 첫 번째 훅이 filter 객체를 저장했는지 확인할 수 있습니다. 나는 모든 후속 시험에 적용 할 것, 테스트에 post 후크를 추가하면

describe('',()=>{ 
    it('', (done)=>{ 
     userSchema.post('save', function(u){ 
     filterModel.findOne({...}).exec().then(()=>{ 
      assert(....); 
      done(); 
     }); 
     }) 

     new userModel({name:'sid'}).save(); 
    }) 
}); 

문제

입니다. after 블록에서이 후크를 제거 할 수 있습니까? 약속을 반환 document#save

답변

0

몽구스, 당신은 then 콜백에 필요한 주장을 약속 체인을 만들고 수행해야합니다

it('should ...',() => { 
    let user = new User(); 

    return user 
    .save() 
    .then(() => // TODO: do your assertion here); 
}); 

한 주을 : 모카에서 비동기 테스트를 위해, 그 시험 모카에게 완료되면 done 콜백을 사용하거나 약속을 반환 할 수 있습니다.

+0

포스트 저장 후크에서 실행되는 코드를 어설 션해야합니다. 후크가 비동기이기 때문에 나는 then()에서 그것을 할 수 없다. – sidgate

+0

당신의 질문에 슬픈 : _ 세부 사항이 두 번째 콜렉션에 저장되어 있는지 확인하고 싶다 ._. 'user.save()'가 실행되면, 모든 _hooks_가 완료 될 때 (동기 및 비동기). 즉,'then' 콜백을 사용하여 데이터가 별도의 컬렉션에 삽입되었는지 확인할 수 있습니다. – alexmac

+0

후크가 비동기 적으로 실행되기 때문에 hook이'then' 콜백 이후에 실행될 수 있습니다. 그래서 나는저기서 그것을 확인할 수 없다. 한 가지 옵션은 setTimeout에서 확인하는 것이지만 올바른 옵션이 아닙니다 – sidgate

관련 문제