如何在指令单元测试中模拟变量?
How to mock variable in directive unit test?
我创建了一个自定义指令,并想模拟一个变量以使测试正常进行。这是单元测试的一部分:
it('should pass on initialvalue', function() {
scope.$apply(function() {
scope.initial = 2;
scope.Repairer = null;
});
expect(elementScope.initial).toEqual(2);
});
该指令在设置初始变量时调用服务。这两个测试都失败了,因为在指令中我有一个名为 request 的变量没有被正确模拟。问题是我怎样才能模拟这个?或者我是否需要将请求变量放在范围内?这是代码的一部分:
if (scope.Repairer) {
console.log('calling scriptservice');
var request = {
allocationProcess: (scope.$parent.lodgement.searchSettings.automatic.visible) ? 'automatic' : 'direct',
allocationSource: 'internal',
brand: brandScriptTag, // lookup brand scripting name
includeSegment: false,
relationship: scope.repairer.relationshipCode,
ruralSearch: scope.repairer.isRural,
state: scope.$parent.lodgement.claimLocation
};
scriptingService.getScript(request).then(function (scripts) {
scope.scripts = scripts;
});
} else {
scope.scripts = null;
}
plunker 参考:http://plnkr.co/edit/juDwpot727jzxzzWeaJl?p=preview
您正在访问 $parent
范围内的一个对象,所以我会这样做:
$rootScope.lodgement = jasmine.any(Object);
但是,您的代码有问题,因为它对此做了很多假设 lodgement
...
//it's better to use jasmine.any(Object)
//$rootScope.lodgement = jasmine.any(Object);
var lodgement_mock = {searchSettings:{automatic:{visible:false}}};
$rootScope.lodgement = lodgement_mock;
p.s。
您的指令中还有另一个错误 - 您尝试访问 scope.repairer
而不是 scope.Repairer
我创建了一个自定义指令,并想模拟一个变量以使测试正常进行。这是单元测试的一部分:
it('should pass on initialvalue', function() {
scope.$apply(function() {
scope.initial = 2;
scope.Repairer = null;
});
expect(elementScope.initial).toEqual(2);
});
该指令在设置初始变量时调用服务。这两个测试都失败了,因为在指令中我有一个名为 request 的变量没有被正确模拟。问题是我怎样才能模拟这个?或者我是否需要将请求变量放在范围内?这是代码的一部分:
if (scope.Repairer) {
console.log('calling scriptservice');
var request = {
allocationProcess: (scope.$parent.lodgement.searchSettings.automatic.visible) ? 'automatic' : 'direct',
allocationSource: 'internal',
brand: brandScriptTag, // lookup brand scripting name
includeSegment: false,
relationship: scope.repairer.relationshipCode,
ruralSearch: scope.repairer.isRural,
state: scope.$parent.lodgement.claimLocation
};
scriptingService.getScript(request).then(function (scripts) {
scope.scripts = scripts;
});
} else {
scope.scripts = null;
}
plunker 参考:http://plnkr.co/edit/juDwpot727jzxzzWeaJl?p=preview
您正在访问 $parent
范围内的一个对象,所以我会这样做:
$rootScope.lodgement = jasmine.any(Object);
但是,您的代码有问题,因为它对此做了很多假设 lodgement
...
//it's better to use jasmine.any(Object)
//$rootScope.lodgement = jasmine.any(Object);
var lodgement_mock = {searchSettings:{automatic:{visible:false}}};
$rootScope.lodgement = lodgement_mock;
p.s。
您的指令中还有另一个错误 - 您尝试访问 scope.repairer
而不是 scope.Repairer