在jasmine中调用$scope方法
Calling $scope methods in jasmine
我对angular和jasmine非常陌生,所以我很抱歉,如果这是一个基本的问题,我在我读过的文档和教程中忽略了一些东西。我正在为一个新的angular项目创建第一个单元测试。我在调用方法和一些变量时遇到了麻烦。
我正在测试这个虚拟控制器:
.controller( 'DummyCtrl', function DummyCtrl($scope){
$scope.name = "TBD";
$scope.changeToJackie = function(){
$scope.name="Jackie";
};
$scope.changeToGeorge = function() {
$scope.name="George";
};
})
使用这个单元测试:
describe( 'DummyCtrl', function(){
var $scope, $controller, DummyCtrl;
beforeEach(module('mApp');
beforeEach(inject(function($injector) {
$scope = $injector.get('$rootScope');
$controller = $injector.get('$controller');
DummyCtrl = $controller('DummyCtrl', {$scope: $scope});
it('should start with TBD', function(){
expect($scope.name).toEqual("TBD");
});
$scope.changeToJackie();
it('should now say Jackie', function() {
expect($scope.name).toEqual("Jackie");
});
$scope.changeToGeorge();
it ('should now say George', function() {
expect($scope.name).toEqual("George");
});
});
在我创建的这个更基本的版本中,我得到了更多的错误,以找出我实际的单元测试(特别是调用调用$http.PUT的$scope.method("param"))。我的错误看起来更像:
Chrome 27.0 (Mac) unauth controllers DummyCtrl should start with TBD FAILED
Error: Argument 'DummyCtrl' is not a function, got undefined
at assertArg (/<path>/build/angular/angular.js:975:11)
at assertArgFn (/<path>/build/angular/angular.js:985:3)
at /<path>/build/angular/angular.js:4656:9
at null.<anonymous> (/<path>/src/app/unauth/unauth.spec.js:20:16)
at Object.invoke (/<path>/build/angular/angular.js:2820:28)
at workFn (/o<path>/build/angular/angular-mocks.js:1780:20)
Error: Declaration Location
at window.inject.angular.mock.inject (/<path>/build/angular/angular-mocks.js:1766:25)
at null.<anonymous> (/<path>/src/app/unauth/unauth.spec.js:10:14)
at null.<anonymous> (/<path>/src/app/unauth/unauth.spec.js:9:2)
at /o<path>/src/app/unauth/unauth.spec.js:1:1
Expected undefined to equal 'TBD'.
Error: Expected undefined to equal 'TBD'.
at null.<anonymous> (/<path>/src/app/unauth/unauth.spec.js:25:25)
Chrome 27.0 (Mac) unauth controllers DummyCtrl encountered a declaration exception FAILED
TypeError: Cannot read property 'stack' of null
at workFn (/<path>/build/angular/angular-mocks.js:1782:55)
TypeError: Cannot call method 'changeToJackie' of undefined
at null.<anonymous> (/<path>/src/app/unauth/unauth.spec.js:28:11)
at null.<anonymous> (/<path>/src/app/unauth/unauth.spec.js:23:3)
at null.<anonymous> (/<path>/src/app/unauth/unauth.spec.js:9:2)
请原谅我在angular/jasmine/javascript中的诞生地。任何帮助,即使它只是一个链接到一个更好的教程,我们都将感激不尽。
您不能在"beforeEach"answers"it"函数之外的测试描述中编写测试代码。
:
$scope.changeToJackie();
it('should now say Jackie', function() {
expect($scope.name).toEqual("Jackie");
});
$scope.changeToGeorge();
it ('should now say George', function() {
expect($scope.name).toEqual("George");
});
需要看起来像:
describe('calling changeToJackie',function () {
beforeEach(function() {
$scope.changeToJackie();
});
it('should now say Jackie', function() {
expect($scope.name).toEqual("Jackie");
});
it ('should say George if I call changeToGeorge', function() {
$scope.changeToGeorge();
expect($scope.name).toEqual("George");
});
});
相关文章:
- 使用$scope方法时的ControllerAs语法
- Angular:如何在状态更改时调用scope方法
- 如何从其他方法访问Angular.js$scope
- 为什么不'我的角度测试$scope上定义了方法
- 在AngularJS中重构$scope操作的更好方法
- 我正在使用 $scope.$apply 在 http 调用后更新对象数组.谁能告诉我正确的方法
- 从同一控制器 Angularjs 中的另一种方法访问$scope变量
- $scope.$on('$routeChangeSuccess'..) 和在 scope 函数中调用方法
- 在指令中使用 $scope.$watch 处理未定义变量的替代方法
- 检查会话存储并将变量传递给 Angular 中的$scope的正确方法
- AngularJs Jasmine 无法在方法$rootScope中调用$scope方法
- 在jasmine中调用$scope方法
- AngularJS表中未识别$scope方法
- 从嵌套指令中调用controller $scope方法
- 如何从包含控制器的指令中调用$scope方法
- 如何在AngularJS控制器中使用$scope方法调用函数
- $scope's方法通过ng-click调用:由IE执行两次
- Angularjs的Scope方法没有被ng-class调用
- 如何在HTML模板中使用Functional $scope方法而不使用ng-click
- Angularjs将$scope方法作为参数传递给另一个$scope方法