Как бросить тест, когда свойство не определено? - PullRequest
0 голосов
/ 24 февраля 2020

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

Post. js

class Post {

  constructor({username, description, photo}) {
    this.username = username;
    this.description = description;
    this.photo = photo;
  }
}

Post.Test. js

test('post must have a username', () => {
  expect(() => new Post({description: 'a', photo: 'photo.jpg'})).toThrow();
});

Как заставить его бросить?

Ответы [ 2 ]

0 голосов
/ 24 февраля 2020

Вам нужно на самом деле выдать исключение, чтобы ваш тест обнаружил его. Если вы хотите, чтобы ваше приложение генерировало исключение, когда username равно null, просто поместите пустую проверку в вашем конструкторе для любых значений, которые вы хотите проверить, например:

 constructor({username, description, photo}) {
    if(!username) {
        throw  'Error: Username must not be undefined';
    }
    this.username = username;
    this.description = description;
    this.photo = photo;
  }

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

class User {
    constructor(username) {
    if(!username) {
        throw  'Error: Username must not be undefined'; // put your validation here, now any places with user will throw the error!
    }
    }
}

Положить валидацию в класс User - это хорошая практика, поскольку она следует принципу высокая когезия , что означает что каждый класс специфицируется c и обрабатывает свою собственную логику / проверку независимо.

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

test('post must have a username', () => {
try {
 new Post({description: 'a', photo: 'photo.jpg'}))
 fail('No exception thrown with null username!')
} catch(e) {
expect(e.getMessage()).toEqual(expected message.....)
}

});
0 голосов
/ 24 февраля 2020

Я думаю, вы должны немного исправить свой класс

class Post {

  constructor(user) {
    if (!user.name) throw 'invalid user name'

    this.username = user.name;
    this.description = user.description;
    this.photo = user.photo;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...