对angular和Jasmine来说是新手。我有一个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和失败。有什么想法吗?
谢谢。
发布于 2016-06-23 04:29:35
您尝试做的并不是真正的单元测试。您应该单独测试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函数的任何依赖。如果您的save函数实际上调用了select(),那么您应该使用间谍和and.CallFake()选项。
https://stackoverflow.com/questions/37888957
复制相似问题