HP.*_*HP. 9 javascript ajax json angularjs angular-mock
我在单独的.js文件中为前端后端环境编写了这个小代码.myfile.json
每当有一个ajax调用时我都需要得到/somelink
.
angular.module('myApp')
.config(function($provide) {
$provide.decorator('$httpBackend', angular.mock.e2e.$httpBackendDecorator);
})
.run(function($httpBackend, $http) {
$httpBackend.whenGET('/somelink').respond(function(method, url, data) {
$http({method: 'GET', url: '/somelink/myfile.json'})
.success(function(data, status, headers, config) {
return data;
})
.error(function(data, status, headers, config) {
});
});
});
Run Code Online (Sandbox Code Playgroud)
但是这段代码不起作用并且给了我错误:
Error: Unexpected request: GET /somelink/myfile.json
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决这个问题吗?
请注意,我不想直接调用$ http来获取代码中的.json文件,因为这会丢弃生产代码.这样做的目的是将此代码分别保留在后端开发中.
谢谢.
更新1:
我补充说:
$rootScope.$apply();
$httpBackend.flush();
Run Code Online (Sandbox Code Playgroud)
现在我还有另外一个错误: Uncaught Error: No pending request to flush !
更新2:
玩完之后,我发现了一个小黑客.我把它放在.run()
所有其他$ httpBackend模拟之前.此.js
文件也必须放在所有控制器/服务/指令之前和app.js引导程序之后.
var data;
$.ajax({
type: 'GET',
async: false,
url: '/somelink/myfile.json'
}).success(function(res) {
data = res;
}).error(function(data) {
});
Run Code Online (Sandbox Code Playgroud)
然后这个:
$httpBackend.whenGET('/somelink').respond(data);
Run Code Online (Sandbox Code Playgroud)
关键是async: false
要确保将JSON加载到变量中data
.所有这些必须在其他对象触发并调用ajax事件之前发生.这只是前端后端开发的黑客攻击.生产时,当然会删除此.js文件.我不喜欢这么多是因为使用async: false
和直接$.ajax()
而不是$http
以下为我工作没有任何黑客攻击
$httpBackend.whenGET('/endpoint').respond($resource("/path/to.json").query());
礼貌https://groups.google.com/d/msg/angular/grbwk-VehDE/UBIho6qcmLMJ
我(和许多其他人)在使用 $httpBackend 进行测试时遇到了这个问题。我还没有将它用于无后端开发。测试中的解决方案是:
AngularJS 固执己见且饥渴难耐,因此要在测试中触发 $http 请求,您必须 $apply 或 $digest。
为了让 $http 在我的测试中工作,我必须
root.$apply();
httpBackend.flush();
Run Code Online (Sandbox Code Playgroud)
也许这样的事情会对你有帮助。
归档时间: |
|
查看次数: |
8039 次 |
最近记录: |