我想测试是否更改了函数参数中传递的变量。传递给它的变量应该改变。
我正在使用Karma和Jasmine进行单元测试。
我的控制器代码如下所示:
angular.module('myApp').controller('MyController', function($scope){
$scope.functions = {};
$scope.functions.deleteSomething = function(someObject, condition){
someObject.someArray = someObject.someArray.filter(function(existingCondition){
return existingCondition !== condition;
});
};
})
我的单元测试:
describe('myControllerSpec', function(){
var scope, controller;
beforeEach(module('myApp'));
beforeEach(inject(function($injector, $controller){
scope = $injector.get('$rootScope').$new();
controller = $controller('MyController', {
$scope: scope
});
}));
it("should check if the passed variable is changed or not", function(){
object = {
someArray: [
{
temp: 'dummy1'
},
{
temp: 'dummy2'
}
]
};
condition = {
temp: 'dummy1'
}
scope.functions.deleteSomething(object, condition);
expect(object.someArray).toEqual([
{
temp: 'dummy2'
}
]);
});
})
我无法弄清楚为什么变量不会改变。是因为它没有附加到范围?
但我不想将它附加到范围并以这种方式测试它。我无法更改控制器,因为它由其他人维护。
有关如何测试此代码的任何建议?
答案 0 :(得分:0)
Javascript中的===
执行引用相等性检查。尝试使用angular.equals()
:
someObject.someArray = someObject.someArray.filter(function(existingCondition){
return !angular.equals(existingCondition, condition);
});