您如何在用 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...
});