Как модульный тест с Жасмином по нескольким цепным функциям с возвратами?

Попробуйте следующее:

((.|\n)*)<FooBar>

В основном он говорит «любой символ или символ новой строки», повторяющийся ноль или более раз.

1
задан lynxidngo 13 July 2018 в 19:23
поделиться

2 ответа

Прежде всего, Object не имеет функции filter, а ваш jasmine.createSpyObj буквально бесполезен. Как говорит @Luan Phan в своем ответе, мы обычно тестируем входное и выходное значение для функции.

Однако, если вы хотели бы знать, например, если Object.keys был вызван внутри вашей функции, вот пример

g3]

it('should func', function () {                        
    spyOn(Object, 'keys').and.callThrough();

    $scope.filterData(data, allowedKeys);                     

    expect(Object.keys).toHaveBeenCalled();
});

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

it('should func', function () {
    spyOn(Object, 'keys').and.callThrough();
    spyOn(Array.prototype, 'filter').and.callThrough();
    spyOn(Array.prototype, 'reduce').and.callThrough();

    $scope.filterData(data, allowedKeys);

    expect(Object.keys).toHaveBeenCalled();
    expect(Array.prototype.filter).toHaveBeenCalled();
    expect(Array.prototype.reduce).toHaveBeenCalled();
});

Если вам действительно нужно mock что одна из встроенных функций возвращается, вот пример

it('should func', function () {
    const mockResult = {};

    spyOn(Array.prototype, 'reduce').and.returnValue(mockResult);

    const result = filterData(data, allowedKeys);

    expect(result).toBe(mockResult);
});

Опять же, встроенные функции Javascript уже имеют тесты, написанные в в другом месте , мы не знаем, t нужно проверить его в нашем тесте, мы должны сосредоточиться на функциях, которые мы пишем.

Надеемся, что это поможет

0
ответ дан Castro Roy 17 August 2018 в 12:12
поделиться

Я не хочу, чтобы это решение помогло вам или нет. Когда мы пишем тестовый пример, особенно тест для функций, мы склонны тестировать входное и выходное значение для функции. И для меня, я думаю, мы не должны касаться примитивной функции Array, Object, вызывая jasmine mock. Если вы хотите знать, правильно ли работает ваша функция в этом случае. Например:

describe('$scope.filterData', function() { 
    //params
    var data = {
        key1: "value1",
        key2: "value2",
        key3: "value3"
    }
    var allowedKeys = ["key1", "key2"];

    it('should return 2 key', function() {            
        var expected = {
          key1: "value1",
          key2: "value2",
        }

        var value = $scope.filterData(data, allowedKeys);
        expect(JSON.stringify(value)).toEqual(JSON.stringify());
    });
});

Конечно, нам иногда приходится иногда издеваться над некоторыми функциями, например, когда у нас есть HTTP-запрос, и мы должны ждать, или у нас есть функция из других мест для использования и хотим их издеваться. Но в этом случае ваша функция не нужна для expect некоторой функции to be called, ее просто достаточно и не зависит от чего-либо еще. Поэтому лучше всего сосредоточиться на входных и выходных значениях функции

0
ответ дан lupa 17 August 2018 в 12:12
поделиться
  • 1
    Вам не хватает параметра в JSON.stringify(), это должно быть JSON.stringify(expected), правильно? – Castro Roy 14 July 2018 в 02:47
  • 2
    да, это моя опечатка, должен быть JSON.stringify (ожидается) – lupa 14 July 2018 в 02:50
Другие вопросы по тегам:

Похожие вопросы: