【发布时间】:2018-07-13 19:23:01
【问题描述】:
我有以下功能:
/**
* filters array down to the given allowed keys
* @param {Object} data
* @param {String[]} allowedKeys
*/
$scope.filterData = function(data, allowedKeys) {
return Object.keys(data)
.filter(function(key) {
return allowedKeys.includes(key);
})
.reduce(function(obj, key) {
obj[key] = data[key];
return obj;
}, {});
};
我想为其创建一个单元测试,到目前为止我有以下内容:
describe('$scope.filterData', function() {
//params
var data = {
key1: "value1",
key2: "value2",
key3: "value3"
}
var allowedKeys = ["key1", "key2"];
//mockobject
var $Object = jasmine.createSpyObj('Object', ['keys', 'filter', 'reduce']);
it('should func', function() {
$Object.keys.and.returnValue($Object);
$Object.filter.and.returnValue($Object);
$Object.reduce.and.returnValue($Object);
$scope.filterData(data, allowedKeys);
expect(Object.filter).toHaveBeenCalled();
});
});
我遇到的问题是我收到以下错误:
TypeError: undefined is not a constructor (evalating 'allowedKeys.includes(key)')
我不明白,如何解决这个错误?
【问题讨论】:
标签: javascript angularjs unit-testing jasmine