棱角分明和茉莉花新手。我有一个save()
方法,我想在我正在测试的控制器中进行单元测试。它设置了一些我之前做过select()
时定义的变量(基本上是在我的UI上单击行时调用的方法)。这是片段:
function select(row){
vm.selected.row = row;
vm.someValue = false;
}
现在我有了save()
function save(){
if(vm.selected.row == 1)
{
//doSomething
}
vm.someSaveValue = vm.someValue; // assigning vm.someSaveValue to the value I set to false in select method above
}
但是如果我为Save()方法编写单元测试,我将无法访问我在select()
方法中创建的变量。任何线索如何实现?
这是我的示例测试代码段
describe('Test someValue setting', function(){
it('test someValues', function (done) {
vm.save().then(function () {
spyOn(vm.select) // maybe this way, but how to access the variables this sets to ??????
expect(vm.someValue).toEqual('true');
});
scope.$apply();
done();
});
});
显然,当我运行我的测试时,它会到达我的主控制器方法save()
,但错误地说It vm.selected.row is undefined
并失败。有什么想法吗?
感谢。
答案 0 :(得分:1)
你要做的不是单元测试。您应该单独测试save()
函数。如果它依赖于来自另一个函数的某些值,则它不再是单元测试。
要在if块内部进行测试,您应手动设置vm.selected.row
的值。同样适用于vm.someValue
。您应该测试vm.SomeSaveValue
的值是您期望的值,而不是vm.someValue
的值。这是我的意思的一个例子:
it('should set the value of vm.SomeSaveValue to false', function() {
vm.someSaveValue = true;
vm.someValue = false;
vm.selected.row = 2;
vm.save()
expect(vm.SomeSaveValue).toEqual(false);
}
或者在if
区块内测试一些内容,例如:
it('should do something', function() {
vm.selected.row = 1;
vm.save();
expect('something done in if block').toBe('some value');
}
这将从测试中删除对select函数的任何依赖性。如果您的保存功能实际调用了select()
,那么您应该使用间谍和and.CallFake()
选项。
答案 1 :(得分:0)
在调用save之前调用另一个方法。
describe('Test someValue setting', function(){
it('test someValues', function (done) {
vm.select(1);
vm.save().then(function () {
spyOn(vm.select) // maybe this way, but how to access the variables this sets to ??????
expect(vm.someValue).toEqual('true');
});
scope.$apply();
done();
});
});