WedX - журнал о программировании и компьютерных науках

Тестирование структуры массива объектов с помощью TypeScript и Jasmine

Наконец-то я добрался до ТТД! Тестирование отличное, но у меня есть проблема. Я тестирую функцию, которая выполняет HTTP-вызов, и получаю большой объект JSON со свойством result. result — это массив объектов, он выглядит примерно так:

{
    itemsPerPage: 2,
    numPages:1,
    offset:0,
    actualPage:1,
    firstPostingOnPage:1,
    lastPostingOnPage:2,
    totalNumberOfJobs:2,
    result: [
        {
            jobPostingId:1,
            postingVersionId:1,
            title: 'first job',
            applyOnlineLink: 'some link',
            config: null,
            jobStartDate: 1234567890,
            postingVersionStartDate:1234567890,
            postingVersionEndDate:1234567890
        }
    ]
};

result может иметь любую длину, но не нулевую. Я хочу проверить структуру объектов в результате. В моем приложении у меня есть следующий тест:

it('The object array should have an object that contains keys "jobPostingId, postingVersionId, title" ', () => {

                    let result:Observable<any> = sut.getJobs();

                    return result.subscribe((content:any) => {

                        assertThat(content, hasProperty('result',

                            containsInAnyOrder({
                                'jobPostingId': is(number()),
                                'postingVersionId': is(number()),
                                'title': is(string()),
                                'applyOnlineLink': is(string()),
                                'config': is(falsy()),
                                'jobStartDate': is(number()),
                                'postingVersionStartDate': is(number()),
                                'postingVersionEndDate': is(number())
                            })
                        ));
                    });
                });

Это не удается, поскольку я получаю сообщение об ошибке

Expected: an object with {result: [{"jobPostingId":{},"postingVersionId":{},"title":{},"applyOnlineLink":{},"config":{},"jobStartDate":{},"postingVersionStartDate":{},"postingVersionEndDate":{}}] in any order}
[2]          but: result no item in [{"jobPostingId":1,"postingVersionId":1,"title":"first job","applyOnlineLink":"some link","config":null,"jobStartDate":1234567890,"postingVersionStartDate":1234567890,"postingVersionEndDate":1234567890}, {"jobPostingId":2,"postingVersionId":1,"title":"second job","applyOnlineLink":"some link","config":null,"jobStartDate":1234567890,"postingVersionStartDate":1234567890,"postingVersionEndDate":1234567890}] matches: {"jobPostingId":{},"postingVersionId":{},"title":{},"applyOnlineLink":{},"config":{},"jobStartDate":{},"postingVersionStartDate":{},"postingVersionEndDate":{}}

Я явно делаю что-то не так, почему он ожидает объект после каждого свойства в объекте из массива объектов.

Заранее спасибо, извините, если задал глупый вопрос.


Ответы:


1

Я использовал неправильные сопоставители и т. д., это сработало...

it('The object array should have an object that contains keys "jobPostingId, postingVersionId, title", etc.... ', () => {

                    let result:Observable<any> = sut.getJobs();

                    return result.subscribe((content:any) => {

                        assertThat(content, hasProperty('result',
                            contains(
                                hasProperties({
                                    'jobPostingId': is(number()),
                                    'postingVersionId': is(number()),
                                    'title': is(string()),
                                    'applyOnlineLink': is(string()),
                                    'config': is(null),
                                    'jobStartDate': is(number()),
                                    'postingVersionStartDate': is(number()),
                                    'postingVersionEndDate': is(number())
                                }),
                                hasProperties({
                                    'jobPostingId': is(number()),
                                    'postingVersionId': is(number()),
                                    'title': is(string()),
                                    'applyOnlineLink': is(string()),
                                    'config': is(null),
                                    'jobStartDate': is(number()),
                                    'postingVersionStartDate': is(number()),
                                    'postingVersionEndDate': is(number())
                                })
                            )
                        ));
                    });
                });
23.06.2016
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]