>我无法在测试用例中获取变量,它在测试用例中显示未定义。控制器:
$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
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()
在之前调用每个语句。
定义,则需要获取控制器的作用域 ID。
尝试
expect(ctrl.$scope.id).toBe('151201')
或者只是控制台.log(Ctrl(并查找范围。 也许它不是$scope,而只是范围。
编辑:
expect($scope.id).toBe('151201')
也应该通过你的测试。