Как протестировать фабрику, у которой есть метод, возвращающий обещание в Karma/Mocha?

Я новичок в модульном тестировании углового кода и пытаюсь понять это. Я использую Karma, Mocha и Chai. Асинхронное модульное тестирование поддерживается в Mocha (асинхронный код) с помощью механизма, который выглядит следующим образом:

describe('User', function(){
  describe('#save()', function(){
    it('should save without error', function(done){
      var user = new User('Luna');
      user.save(done);
    })
  })
})

который, я предполагаю, может быть переписан, предполагая, что savePromise является реализацией обещания

describe('User', function(){
  describe('#save()', function(){
    it('should save without error', function(done){
      var user = new User('Luna');
      user.savePromise().then(function(){
        done()
      })
    })
  })
})

это было бы круто, но инъекция из angular-mock не помещает функцию done в обратный вызов «it». Я просмотрел код и даже попробовал его (зная, что это не удастся). По сути, я считаю, что хочу что-то вроде этого

describe('#save()', function(){
   it('should save without error', inject(function (User, done) {

      var user = new User('Luna');
      user.savePromise().then(function(){
        done()
      })
   }) 
})  

Как заставить angular-mock работать с Mocha?


person akaphenom    schedule 26.09.2014    source источник


Ответы (1)


Подождите... это так же просто, как сделать инъекции и перед тестом?

var myUser
beforeEach(inject(function (User) {
    myUser = User
}))

describe('#save()', function(){
   it('should save without error', function (done) {

      var user = new myUser('Luna');
      user.savePromise().then(function(){
        done()
      })
   }) 
})  

Это все еще не работает в моем случае. Я пытаюсь протестировать HTTP-клиент, который, похоже, не делает вызовов. Однако код выглядит так, что если я внесу изменения выше, он должен работать.

person akaphenom    schedule 26.09.2014