Angularjs - Jasmine范围变量在测试中未定义

时间:2016-12-15 08:41:29

标签: javascript angularjs jasmine karma-jasmine

我正在尝试测试我的angularjs代码。

我的控制器是大胆的。

'use strict';
(function() {
     angular.module('myApp')
    .controller('TestController', function($scope, $http, Auth, myService, $state) {
        try{
              $scope.testVar  = "Hello";
        }catch(e){
           console.log(e);
        }
     });
});

我的测试代码如下:

'use strict';

 describe('Controller: TestController', function () {

     beforeEach(module('myApp'));

     var TestController, scope;

     beforeEach(inject(function ($controller, $rootScope) {
        scope = $rootScope.$new();

        TestController = $controller('TestController', {
             $scope: scope
        });
      }));

     it('should testVar to be defined', function () {
       expect(scope).toBeDefined();
       expect(scope.testVar).toBeDefined();
      });
});

当我运行它时,测试失败为Expected undefined to be defined.

我不知道我做错了什么?

我已经在SO上查了很多帖子,但还没有得到解决。

2 个答案:

答案 0 :(得分:0)

可能问题与您的变量声明有关。您已经声明了ManualBookingController,但是您将$ Control行使用TestController。将ManualBookingController更改为TestController,看看是否有效。

答案 1 :(得分:0)

我几乎按原样使用了你的代码,把它放在fiddle中,测试通过就好了。在您的情况下,我认为可能缺少的是您的控制器中存在一些依赖项,但在测试套件中使用$controller创建模拟控制器时不会进行模拟。我从原来的控制器中删除了它们(现在)并且工作正常。

为了模仿$state(提供商)和其他服务,您可以看到此same example fiddle passing with dependencies injected并阅读underscore wrapping

另外,请注意,在您的问题上分享确切的详细信息非常重要。当我使用您的确切代码运行您的测试套件时,它首先给了我以下错误:

  

Error: [$injector:unpr] Unknown provider: $stateProvider <- $state http://errors.angularjs.org/1.2.9/ $ injector / unpr?p0 =%24stateProvider%20%3C-%20%24state

..在你的问题中根本没有提到。您只提到了下一个错误Expected undefined to be defined,这个错误非常常见,并且无法想象发生了什么。

相关问题