Попробуйте следующее:
((.|\n)*)<FooBar>
В основном он говорит «любой символ или символ новой строки», повторяющийся ноль или более раз.
Прежде всего, 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 нужно проверить его в нашем тесте, мы должны сосредоточиться на функциях, которые мы пишем.
Надеемся, что это поможет
Я не хочу, чтобы это решение помогло вам или нет. Когда мы пишем тестовый пример, особенно тест для функций, мы склонны тестировать входное и выходное значение для функции. И для меня, я думаю, мы не должны касаться примитивной функции 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
, ее просто достаточно и не зависит от чего-либо еще. Поэтому лучше всего сосредоточиться на входных и выходных значениях функции
JSON.stringify()
, это должно быть JSON.stringify(expected)
, правильно?
– Castro Roy
14 July 2018 в 02:47