我正在为角度控制器编写测试用例。我在模拟服务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()函数模拟服务呢。
答案 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()
所以你不能在测试运行器中使用它。
您的选择是......
安装bind-polyfill(最好在您的Bower }.bind(this)
中)并将其包含在devDependencies
个文件中
别名karma.conf.js
this
如果您使用下划线/ lodash,请尝试使用var ctrl = this;
this.testMe = User.getDetails().then(function (response) {
ctrl.user = response.data;
}, function (response) {
console.log("error function mocking")
});
功能
_.bind
在this.testMe = User.getDetails().then(_.bind(function (response) {
ctrl.user = response.data;
}, this)
文件中使用其他浏览器
karma.conf.js