Angularjs 让jasmine和angular一起工作有困难

Angularjs 让jasmine和angular一起工作有困难,angularjs,unit-testing,jasmine,Angularjs,Unit Testing,Jasmine,我很难理解如何设置Jasmine与Angular一起工作,以便进行测试。我遵循标题为“测试控制器”下的说明。根据文档,你应该像平常一样定义你的应用程序和控制器(这是从文档中粘贴的): 然后您应该将其作为您的测试套件代码,例如(也从文档中粘贴) 但有几件事我非常困惑 文档解释说,您需要使用angularmocks来加载控制器,但在它们的示例中,它们没有将ngmock声明为应用程序依赖项(请参见上面粘贴的第一块代码) 它说您可以使用angular.mock.inject将控制器注入当前上下文。我加载

我很难理解如何设置Jasmine与Angular一起工作,以便进行测试。我遵循标题为“测试控制器”下的说明。根据文档,你应该像平常一样定义你的应用程序和控制器(这是从文档中粘贴的):

然后您应该将其作为您的测试套件代码,例如(也从文档中粘贴)

但有几件事我非常困惑

  • 文档解释说,您需要使用
    angularmocks
    来加载控制器,但在它们的示例中,它们没有将
    ngmock
    声明为应用程序依赖项(请参见上面粘贴的第一块代码)
  • 它说您可以使用
    angular.mock.inject
    将控制器注入当前上下文。我加载了脚本,现在全局作用域上有一个
    angular.mock
    ,但它没有
    inject
    方法。此外,由于测试代码在控制器之外运行,我不明白在angular应用程序中使用
    ngMocks
    依赖项如何帮助提供注入控制器的全局方法。这整件事对我来说毫无意义
  • 模块
    也是如此。它说你可以在每个模块('app')之前将其用于
    ,它由
    angular mock
    提供,但angular.mock没有
    模块
    方法

  • 如果有人能解释我做错了什么,我将非常感激

    所以我发现问题在于我的
    角度模拟的脚本标签是之前的我的Jasmine脚本标签是在之后的。在典型的“文档”精神中,这一点没有被提及。重新排列脚本标记后,
    module
    inject
    都是全局可用的方法

    所以要回答我的第一个问题,您不需要将
    ngMock
    放在依赖项中。这回答了问题2和问题3,因为
    模块
    注入
    现在都在全球范围内可用

    因此,脚本需要按此顺序放置

    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/jasmine.css">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/jasmine.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/jasmine-html.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/boot.js"></script>
    <!--angluar mocks script MUST go after the other declarations otherwise it won't add the inject and module methods to the scope -->
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-mocks.js"></script>
    

    所以我发现问题在于,我的
    角度模拟的脚本标记在之前我的Jasmine脚本标记在之后。在典型的“文档”精神中,这一点没有被提及。重新排列脚本标记后,
    module
    inject
    都是全局可用的方法

    所以要回答我的第一个问题,您不需要将
    ngMock
    放在依赖项中。这回答了问题2和问题3,因为
    模块
    注入
    现在都在全球范围内可用

    因此,脚本需要按此顺序放置

    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/jasmine.css">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/jasmine.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/jasmine-html.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/boot.js"></script>
    <!--angluar mocks script MUST go after the other declarations otherwise it won't add the inject and module methods to the scope -->
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-mocks.js"></script>
    
    
    
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/jasmine.css">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/jasmine.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/jasmine-html.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/boot.js"></script>
    <!--angluar mocks script MUST go after the other declarations otherwise it won't add the inject and module methods to the scope -->
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-mocks.js"></script>