测试Async $http真实调用angularjs
Test Async $http real calls for angularjs
我想对一个angularjs服务做一个端到端测试,但不模拟$http调用。调用fsSvc。getSubject导致多个内嵌的异步调用,最终以调用回调函数结束,我已经把调用完成了。
不确定这不工作-不应该$http使真正的调用,如果它不是嘲笑?:
it('should pass auth', function(done) {
inject(function (fsSvc) {
var cb = sinon.spy();
stubs.updateRecord = sinon.stub(dataSvc, 'updateRecord');
dataSvc.LO.famSrch.access_token_expires = false;
fsSvc.getSubject("abc", function(err, data) {
console.log("err:" + err);
done();
cb();
});
$timeout.flush();
expect(dataSvc.LO.famSrch.discovery).to.not.be.undefined;
expect(dataSvc.LO.famSrch.discovery.links).to.not.be.undefined;
expect(dataSvc.LO.famSrch.access_token).to.not.be.undefined;
expect(dataSvc.LO.famSrch.username).to.equal("test");
expect(dataSvc.LO.famSrch.password).to.equal(btoa("test"));
expect(dataSvc.LO.famSrch.access_token_expires).to.be.greaterThan(3600000);
expect(stubs.updateRecord.callCount).to.equal(1);
expect(stubs.updateRecord.args[0][1]).to.equal("localOption");
expect(cb.callCount).to.equal(1);
})
});
我不认为包含e2e有任何问题。这对你来说有什么问题?
如果你决定给ngMockE2E一个尝试,请记住,它不处理async/promise响应。
例如,如果你的模拟响应是一个承诺,它将不起作用。像去DB或使用WebSQL/IndexedDB(或其他内存DB)这样的实例将不起作用。
我已经开发了一个叫做angular-mock -async的angular插件来解决这个问题。下面是一个mock示例:var app = ng.module( 'mockApp', [
'ngMockE2E',
'ngMockE2EAsync'
]);
app.run( [ '$httpBackend', '$q', function( $httpBackend, $q ) {
$httpBackend.whenAsync(
'GET',
new RegExp( 'http://api.example.com/user/.+$' )
).respond( function( method, url, data, config ) {
var re = /.*'/user'/('w+)/;
var userId = parseInt(url.replace(re, '$1'), 10);
var response = $q.defer();
setTimeout( function() {
var data = {
userId: userId
};
response.resolve( [ 200, "mock response", data ] );
}, 1000 );
return response.promise;
});
}]);
相关文章:
- 尝试调用AngularJS上的函数时出错
- 如何使用onclick事件调用AngularJS控制器
- 在jQuery中调用AngularJS函数
- 在 html5 视频结束时调用 AngularJS 控制器函数
- 如何点击按钮调用angularJs服务
- 为什么更改范围获胜'不能在ng if内部工作,而是通过函数调用AngularJS
- 调用AngularJS内部<脚本>标签
- 从html调用angularjs控制器中的一个函数,但未定义范围变量
- 从Javascript调用AngularJS控制器
- 单击链接时不调用 AngularJs 控制器
- 异步调用 AngularJS 不适用于 Canvas HTML
- 从Javascript调用AngularJS方法
- 从遗留代码调用 AngularJS
- 如何从纯JavaScript方法调用AngularJS过滤器
- 未调用 AngularJS 模板 ng-change
- 正确处理调用 AngularJS $http中的错误
- 如何从事件处理程序调用 AngularJS 作用域定义的函数
- 如何从android webview调用AngularJS服务代码
- 为什么不是't正在调用AngularJS表单处理程序方法
- 未调用Angularjs资源工厂transformResponse