嘲弄承诺链功能

时间:2015-11-17 06:07:14

标签: angularjs unit-testing jasmine karma-jasmine

我正在为角度控制器编写测试用例。我在模拟服务API调用时遇到了一个问题。 我的控制器api调用是:

 this.testMe = User.getDetails().then(function (response) {
            this.user = response.data;

        }.bind(this), function (response) {
            console.log("error function mocking")
        });

在我的测试用例中,我想模拟此服务" 用户"""""""""""" getDetails &#34 ;。所以我的测试案例嘲笑是这样的:

   this.getCurrentUserDetails = function () {
                    var deferred = $q.defer();
                    deferred.resolve({data: 'test'});
                    return deferred.promise;
                };

当我运行测试用例时,它给出了这样的错误:

  

'未定义'不是一个函数(接近' ...}。bind(this),function(re ...')

在我的API调用中,有 bind()函数,控制器无法找到该函数。那么如何使用bind()函数模拟服务呢。

1 个答案:

答案 0 :(得分:2)

您在控制器中使用<form method="post" action="./BrightSymphonyController" > <% for(int i=0;i<list.size();i++){ %> <table id="example" class="display" cellspacing="0" width="100%"> <thead> <tr> <th style="display: none;">ID</th> </tr> </thead> <tbody> <td> <input type="submit" class="urlImgDelete" value="Delete" /> <input type="hidden" name="id" value="<%=list.get(i).getId()%>"/> <input type="hidden" name="delete" value="Delete" /> </td> <%}%> </tbody> </table> </form> Function.prototype.bind位)。 PhantomJS 1.x has not implemented bind()所以你不能在测试运行器中使用它。

您的选择是......

  1. 安装bind-polyfill(最好在您的Bower }.bind(this)中)并将其包含在devDependencies个文件中

  2. 别名karma.conf.js

    this
  3. 如果您使用下划线/ lodash,请尝试使用var ctrl = this; this.testMe = User.getDetails().then(function (response) { ctrl.user = response.data; }, function (response) { console.log("error function mocking") }); 功能

    _.bind
  4. this.testMe = User.getDetails().then(_.bind(function (response) { ctrl.user = response.data; }, this) 文件中使用其他浏览器

    karma.conf.js