ложный HTTP-ответ с обещаниями и возвращением фиктивных данных

0

Я звоню в службу API, которая возвращает обещание с завода.

Вот часть моей фабрики.

     factories.factory('OnBoardingFactory', ['$http',

        function ($http) {

          var dataFactory = {};

          dataFactory.get = function (url) {
            return $http.get('http://localhost/api/onboarding/' + url)
          };

          return dataFactory
        }

     ]);

И вот где его вызвали из контроллера:

OnBoardingFactory.get('login?username=test&password=password')
   .then(function(response){
      $scope.response = response.status;
   })

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

var scope, FakeOnBoardingFactory, controller, q, deferred;

beforeEach(module('app.module'));

beforeEach(function () {
  FakeOnBoardingFactory = {
    get: function () {
      deferred = q.defer();
      // Place the fake return object here
      deferred.resolve({ response: {status: 200}});
      return deferred.promise;
    }
  };
  spyOn(FakeOnBoardingFactory, 'get').and.callThrough();
});

beforeEach(inject(function ($q, $rootScope, $controller, $injector ) {

  scope = $rootScope.$new();
  q = $q;

  controller = $controller(OnBoardingCtrl, {
    $scope: scope,
    OnBoardingFactory: FakeOnBoardingFactory
  })

}));

it('Should call the form and return 200', function () {

  // Execute form
  scope.loginCredentials({$valid: true});

  scope.$apply();

  // Ensure script is called (which passes fine)
  expect(FakeOnBoardingFactory.get).toHaveBeenCalled();

  scope.$apply();

  // BREAKS HERE
  expect(scope.status).toBe(200);

})

Когда expect(FakeOnBoardingFactory.get).toHaveBeenCalled(); называется, это проходит отлично. Однако затем я запускаю expect(scope.status).toBe(200), он прерывает "Ожидаемое неопределенное значение 200".

Это указывает на то, что мой FakeOnBoardingFactory не возвращает никаких данных. Но я не могу найти проблему.

Теги:
unit-testing
mocking
jasmine

1 ответ

0

Это должно быть изменение для поддержки нескольких утверждений тела, которые вызвали эту ошибку. Обходной путь на данный момент заключается в том, чтобы либо не использовать ожидаемый, либо делать свое утверждение в обратном вызове конца функции. Так что вместо.expect(200) это будет так.

end(function(err,res) { res.status.should.equal(200) },

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

it('should assert status only 1', function(done){ 
var app = express(); 
app.get('/user', function(req, res){
 res.send(201, { name: 'tobi' }); }); request(app) .get('/user')
 .expect('Content-Type', /json/)
 .expect('Content-Length', '20')
 .expect(201)
 .end(function(err, res){
 if (err) throw err; 
}); 
})

Ещё вопросы

Сообщество Overcoder
Наверх
Меню