【问题标题】:AngularJS testing with Jasmine unable to call "angular.mock.module" while using angular-mocks.js使用 Jasmine 进行 AngularJS 测试无法在使用 angular-mocks.js 时调用“angular.mock.module”
【发布时间】:2013-11-20 23:20:31
【问题描述】:

我正在尝试进行基本单元测试,但在使用 angular-mocks.js 时遇到了问题。希望这段代码能解释我的情况。

describe("peconfigApp", function () {

    beforeEach(function() {
        angular.mock.module('peconfigApp');
    });

    describe("Binaries Controller", function () {
        it("should work", function () {
            expect(true).toBe(true);
        });
    });

});

茉莉花结果错误:

TypeError: Object #<Object> has no method 'module'
   at null.<anonymous> (http://localhost:58141/Tests/js/controller-tests.js:4:22)
   at jasmine.Block.execute (http://localhost:58141/Tests/lib/jasmine.js:1064:17)

我已经在代码的不同部分放置了警报,以在我的测试加载和运行之前验证 angular-mocks.js 正在加载,所以我很确定加载不是问题。

<script type="text/javascript" src="../lib/angular.min.js"></script>
<script type="text/javascript" src="../lib/angular-mocks.js"></script>
<script type="text/javascript" src="lib/jasmine.js"></script>
<script type="text/javascript" src="lib/jasmine-html.js"></script>
<script type="text/javascript" src="../js/controllers.js"></script>
<script type="text/javascript" src="js/controller-tests.js"></script>

【问题讨论】:

    标签: javascript unit-testing angularjs jasmine


    【解决方案1】:

    我在茉莉花加载后移动了 angular-mocks 加载。

    <script type="text/javascript" src="../lib/angular.min.js"></script>
    <script type="text/javascript" src="lib/jasmine.js"></script>
    <script type="text/javascript" src="lib/jasmine-html.js"></script>
    <script type="text/javascript" src="../lib/angular-mocks.js"></script>
    <script type="text/javascript" src="../js/controllers.js"></script>
    <script type="text/javascript" src="js/controller-tests.js"></script>
    

    这使它工作。愚蠢的问题,我在阅读文档和教程时一定错过了这个。

    【讨论】:

      【解决方案2】:

      为了在您的单元测试中设置module,您通常会执行以下操作:

      beforeEach(module('peconfigApp'));
      

      只要您的配置设置正确(以提取正确的文件),就应该允许您在测试中解决模块问题。

      The documentation on unit testing 很不错,值得一读。

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        我只花了一个小时试图让 jasmine 读取我的控制器等。一切都必须按照 Chris 所说的完全正确的顺序进行。

        我用于运行 jasmine 的 index.html:

        <html ng-app="myApp">
        <body>
        
            <link href="jasmine.css" rel="stylesheet" />
        
            <!-- Init Angular -->
            <script src="../angular.min.js"></script>
            <script src="../angular-resource.min.js"></script>
        
            <!-- My code -->
            <script src="../app/controller.js"></script>
            <script src="../app/main.js"></script>
            <script src="../app/service.js"></script>
        
            <!-- Init Jasmine -->
            <script src="../jasmine.js"></script>
            <script src="../jasmine-html.js"></script>
            <script src="../angular-mocks.js"></script>
        
            <!-- Insert spec's-->
            <script src="spec/controller.spec.js"></script>
        
            <!-- And GO! -->
            <script src="runner.js"></script>
        
            <!-- A basic test to check "connectivity" -->
            <div id="container" ng-controller="myCtrl">
                <h1>Say something... {{data.variablehere}}</h1>
            </div>
            <div id="HTMLReporter" class="jasmine_reporter"></div>
        
        
        </body>
        
        </html>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-06-01
          • 1970-01-01
          • 2017-06-10
          • 2016-05-28
          • 2013-09-29
          • 2016-08-14
          • 2013-06-29
          • 2016-03-17
          相关资源
          最近更新 更多