我无法在测试用例中获得变量,它在测试用例中显示未定义。 控制器:
$scope.sample = function(){
var id="151201";
});
测试:
var ctrl, scope, ;
beforeEach(inject(
function($controller, $rootScope){
scope = $rootScope.$new();
scope.$digest();
ctrl = $controller('controller', {
$scope:scope
});
describe('scope functions', function() {
it('sample', function() {
expect(id).toBe('151201')
});
});
获取错误:期望未定义为151201
答案 0 :(得分:2)
1)在测试之前调用$scope.digest()
而不是在初始化控制器之前。摘要通常会调用观察者,因为您还没有初始化控制器并创建了$ scope.id,所以在此之前没有运行摘要的意义。即使在控制器内,我怀疑你有一个更改值的事件,因为没有其他服务($ http)可供使用。
2)如果你有一个控制器,你有$scope.id = "test"
,你只需要测试它:
expect($scope.id).toEqual("test");
P.S。 $ scope.sample = function(){var id =" 12321321"}你不能这样。首先,因为 id 变量对于样本函数是私有的。您既不会将其分配给 $ scope ,也不会分配给此。另一件事是你可能想把它分配给$ scope,所以这样就会:
$scope.sample = function(){
$scope.id = "12345";
}
#the test will look like
it('should assign id', function(){
$scope.sample();
expect($scope.id).toEqual("12345");
})
然后删除
$digest()
调用beforeEach语句。
答案 1 :(得分:0)
未定义,您需要获取控制器的范围ID。
尝试
expect(ctrl.$scope.id).toBe('151201')
或只是console.log(ctrl)并寻找范围。也许它不是美元范围而只是范围。
编辑:
expect($scope.id).toBe('151201')
也应通过测试。