您如何在用 TypeScript 编写的 Angular 控制器上访问范围值(在您的测试中)?
How do you access scope values (in your tests) on an Angular controller written in TypeScript?
如果您以某种方式在 TypeScript 中编写 angular 控制器,以便控制器接受 $scope
作为输入参数:
class TestCtrl {
constructor($scope:ng.IScopeService) {
$scope.myData = "Information";
}
}
您可以通过以下方式从您的测试中轻松验证示波器的属性:
beforeEach(function() {
$controller("TestCtrl", { $scope: $scope });
});
it("Should have some data set upon creation", function() {
expect($scope.myData).not.toBeUndefined(); // this is perfectly fine, and we can assert the data.
});
您也可以通过这种方式创建您的控制器,不是在构造函数中提供 $scope:
interface ITestScope {
myData: string;
}
class TestCtrl implements ITestScope {
myData: string; // this will be available on the scope as well.
constructor() {
this.myData = "Information";
}
}
现在根据我的测试,当我无法再访问 $scope
时,我将如何访问此范围并验证数据?
您没有在控制器 (constructor($scope:ng.IScopeService) {
) 中注入作用域,因此您不需要在 $controller
的局部变量中传递它。并且似乎您正在使用 controller as
语法(因为您在控制器实例上分配属性)所以只需使用 $controller
服务返回的控制器实例。
即
var ctrl;
beforeEach(function() {
ctrl = $controller("MyCtrl", {}); //No locals and assign result to a variable
});
it("Should have some data set upon creation", function() {
expect(ctrl.myData).not.toBeUndefined(); // Set your expectation on controller instance
//expect(ctrl.myData).toBeDefined() //This is just as same...
});
如果您以某种方式在 TypeScript 中编写 angular 控制器,以便控制器接受 $scope
作为输入参数:
class TestCtrl {
constructor($scope:ng.IScopeService) {
$scope.myData = "Information";
}
}
您可以通过以下方式从您的测试中轻松验证示波器的属性:
beforeEach(function() {
$controller("TestCtrl", { $scope: $scope });
});
it("Should have some data set upon creation", function() {
expect($scope.myData).not.toBeUndefined(); // this is perfectly fine, and we can assert the data.
});
您也可以通过这种方式创建您的控制器,不是在构造函数中提供 $scope:
interface ITestScope {
myData: string;
}
class TestCtrl implements ITestScope {
myData: string; // this will be available on the scope as well.
constructor() {
this.myData = "Information";
}
}
现在根据我的测试,当我无法再访问 $scope
时,我将如何访问此范围并验证数据?
您没有在控制器 (constructor($scope:ng.IScopeService) {
) 中注入作用域,因此您不需要在 $controller
的局部变量中传递它。并且似乎您正在使用 controller as
语法(因为您在控制器实例上分配属性)所以只需使用 $controller
服务返回的控制器实例。
即
var ctrl;
beforeEach(function() {
ctrl = $controller("MyCtrl", {}); //No locals and assign result to a variable
});
it("Should have some data set upon creation", function() {
expect(ctrl.myData).not.toBeUndefined(); // Set your expectation on controller instance
//expect(ctrl.myData).toBeDefined() //This is just as same...
});