Жасмин Тест сортировки () localecompare ()

1

Как написать тест жасмина для ниже кода:

var items = ['réservé', 'premier', 'cliché', 'communiqué', 'café', 'adieu'];
items.sort((a, b) => a.localeCompare(b)); // ['adieu', 'café', 'cliché', 'communiqué', 'premier', 'réservé']

Как я spy на sort() с двумя аргументами.

Теги:
karma-jasmine
jasmine

2 ответа

0

Попробуйте создать другой шпион как для sort, а также localeCompare.

spyOn(Array.prototype,'sort').and.callThrough();
spyOn(String.prototype,'localeCompare'); // Add callThrough() if you want to verify the order

Таким образом, вы можете следить за обоими методами.

Теперь, если вы хотите проверить правильность заказа, затем создайте базовую функцию для проверки порядка.

Пример метода проверки возрастания: (Его в машинописном тексте, но вы получаете логику)

public static isAscending(array: Array<string>): boolean { 
    let isAscending = false;
    let prev = array[0];
    for (let i = 0; i < array.length; i++) {
        if (i != array.length - 1) {
            if (prev < array[i + 1]) {
                isAscending = true;
            }
            else {
                return false;
            }
        }
    }
    if (isAscending) {
        return true;
    }
}
0

У вас здесь два вопроса. Первый слишком широк и неопределен, поэтому я не буду отвечать на него. Второй - простой. Чтобы шпионить за методом sort массива, просто поставьте это в спецификации блока beforeEach:

spyOn(Array.prototype, 'sort');

Что здесь происходит, так это то, что метод sort в вашем массиве на самом деле тот же, что и в объекте прототипа Array.

  • 0
    Я также хочу проверить, если localeCompare haveBeenCalled, я не могу понять, как шпионить за этим. Я получаю сообщение об ошибке: undefined не является объектом (оценка 'a.localeCompare)
  • 0
    Должно ли это быть spyOn(String.prototype, "localeCompare");
Показать ещё 1 комментарий

Ещё вопросы

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