Транспортир/Жасмин ожидает массив объектов как шаблон

У меня есть тест, в котором я ожидаю массив объектов. Приведенное ниже условие ожидания работает нормально. Но каждый день из-за поведения тестируемой системы нам нужно менять ожидаемый массив объектов данных. Итак, мой вопрос: как ожидать шаблон для массива объектов такого типа, не ожидая точного значения? или есть ли другой хороший способ справиться с этим?

    it('Verify the functionality of displaying correct data in Status grid table', function() {
        expect(HomePage.getStatusGrid()).toEqual([ 
            { make : 'Make1',   model : 'Model1',   totLoads : '17.24', washDays : 'Wednesday', timeDay : '10:00-11:00' },
            { make : 'Make1',   model : 'Model2',   totLoads : '15.58', washDays : 'Wednesday', timeDay : '16:00-17:00' },
            { make : 'Make1',   model : 'Model3',   totLoads : '17.17', washDays : 'Monday',    timeDay : '18:00-19:00' },
            { make : 'Make2',   model : 'Model4',   totLoads : '16.27', washDays : 'Monday',    timeDay : '19:00-20:00' },
            { make : 'Make2',   model : 'Model5',   totLoads : '16.19', washDays : 'Thursday',  timeDay : '19:00-20:00' },
            { make : 'Make2',   model : 'Model6',   totLoads : '15.01', washDays : 'Friday',    timeDay : '10:00-11:00' },
            { make : 'Make3',   model : 'Model7',   totLoads : '16.94', washDays : 'Tuesday',   timeDay : '11:00-12:00' },
            { make : 'Make3',   model : 'Model8',   totLoads : '15.72', washDays : 'Thursday',  timeDay : '10:00-11:00' },
            { make : 'Make3',   model : 'Model9',   totLoads : '15.90', washDays : 'Saturday',  timeDay : '16:00-17:00' }
        ]);
    });

person Umesh_IoT    schedule 30.09.2016    source источник


Ответы (2)


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

Тем не менее, простой подход к циклу по строкам в сетке и применению сопоставлений toMatch() может быть достаточно хорошим:

var grid = [      
  { make : 'Make1',   model : 'Model1',   totLoads : '17.24', washDays : 'Wednesday', timeDay : '10:00-11:00' },
  { make : 'Invalid make',   model : 'Model1',   totLoads : '17.24', washDays : 'Wednesday', timeDay : '10:00-11:00' },    
];
grid.forEach(function (row) {
    expect(row.make).toMatch(/Make\d+/);
    expect(row.model).toMatch(/Model\d+/);
    // TODO: more checks
}); 

Обратите внимание, что если HomePage.getStatusGrid() возвращает обещание, вам нужно будет явно разрешить его:

HomePage.getStatusGrid().then(function (grid) {
    grid.forEach(function (row) {
        expect(row.make).toMatch(/Make\d+/);
        expect(row.model).toMatch(/Model\d+/);
        // TODO: more checks
    }); 
});
person alecxe    schedule 30.09.2016
comment
Это именно то, что я искал. HomePage.getStatusGrid() возвращает обещание, поэтому я использовал второй подход. Большое спасибо! - person Umesh_IoT; 03.10.2016

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

Некоторые ссылки, чтобы вы начали на этом.

Жасмин 2.0 тест с пользовательский сопоставитель не работает: undefined не является функцией

http://jasmine.github.io/2.0/custom_matcher.html

person AdityaReddy    schedule 30.09.2016
comment
Я проверю это. Спасибо. - person Umesh_IoT; 03.10.2016