AngularJS тестирование с помощью Jest - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь имитировать HTTP-запросы для AngularJS в Jest.

У меня есть такая услуга

public UserService(user) { 
    let url = this.env.getUserEndpoint("/users"); 
    let deferred = this.$q.defer<any>(); 

    this.$http.post<{ user: IUser }>(url,user).then( (result) => {
        deferred.resolve(result.data.user); 
    }, (error) => { 
        deferred.reject(this.httpErrorHandlingService.handleHttpError(error, "creating new user")); 
    }); 

    return deferred.promise;
}

Test:

beforeEach(angular.mock.module("test"));

var userService;

beforeEach(angular.mock.inject(function (UserService) {
    userService = UserService;
}));

it('should create new user', function () {
    const newUser = {
        name: "testUser",
        password: "12345"
    };

    return userService.createNewUser(newUser).then(user => expect(user.name).toEqual("testUser")
});

Я получаю сообщение об ошибке: Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.Timeout

Что я делаю не так и как я могу высмеять AngularJS HTTP-запросы самым простым способом?

1 Ответ

1 голос
/ 07 мая 2020

Вам не нужно создавать собственное обещание - $http.post() возвращает вам одно. Затем вы можете вернуть данные ответа в своих обратных вызовах функций успеха и ошибки в своем методе then, и они будут переданы обещанию, возвращенному $http.post(). Это должно немного упростить ваш сервисный код:

public UserService(user) { 

    public createNewUser(user) {
        let url = this.env.getUserEndpoint("/users"); 

        return this.$http.post<{ user: IUser }>(url, user).then((result) => {
            return result.data.user; 
        }, (error) => { 
            this.httpErrorHandlingService.handleHttpError(error, "creating new user"); 
        });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...