Я не хочу, чтобы это решение помогло вам или нет. Когда мы пишем тестовый пример, особенно тест для функций, мы склонны тестировать входное и выходное значение для функции. И для меня, я думаю, мы не должны касаться примитивной функции 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
, ее просто достаточно и не зависит от чего-либо еще. Поэтому лучше всего сосредоточиться на входных и выходных значениях функции
Один из способов сделать это - определить нужные ключи (значения не имеют значения).
$keys = ['grey' => 1, 'blue' => 1, 'yellow' => 1];
Затем используйте array_intersect_key
в каждой строке, чтобы получить свой результат.
foreach ($array as $row) {
$result[] = array_values(array_intersect_key($row, $keys));
}
array_values
здесь необходимо, потому что если у вас все еще есть строковые ключи, результатом json_encode
будет массив объектов, а не массив массивов.