错误:单元测试AngularJs服务时,没有待处理的flush请求
Error: No pending request to flush - when unit testing AngularJs service
我是AngularJs的新手,我正在编写我的第一个单元测试;为了测试服务,我编写了一个只返回单个Json对象的测试。然而,每次我运行测试时,我都会得到标题中所述的错误。我不知道到底是什么引起的!我试着阅读$apply
和$digest
,不确定在我的情况下是否需要,如果是,如何;一个简单的柱塞演示将不胜感激。
这是我的代码
服务var allBookss = [];
var filteredBooks = [];
/*Here we define our book model and REST api.*/
var Report = $resource('api/books/:id', {
id: '@id'
}, {
query: {
method: 'GET',
isArray: false
}
});
/*Retrive the requested book from the internal book list.*/
var getBook = function(bookId) {
var deferred = $q.defer();
if (bookId === undefined) {
deferred.reject('Error');
} else {
var books= $filter('filter')(allBooks, function(book) {
return (book.id == bookId);
});
if (books.length > 0) {
deferred.resolve(books[0]);//returns a single book object
} else {
deferred.reject('Error');
};
};
return deferred.promise;
};
测试describe('unit:bookService', function(){
beforeEach(module('myApp'));
var service, $httpBackend;
beforeEach(inject(function (_bookService_, _$httpBackend_) {
service = _bookService_;
$httpBackend = _$httpBackend_;
$httpBackend.when('GET', "/api/books/1").respond(200, {
"book": {
"id": "1",
"author": "James Spencer",
"edition": "2",
.....
}
});
}));
afterEach(function() {
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
it('should return metadata for single report', function() {
service.getBook('1').then(function(response) {
expect(response.length).toEqual(1);
});
$httpBackend.flush();// error is in this line
});
});
错误Error: No pending request to flush !
at c:/myapp/bower_components/angular-mocks/angular-mocks.js:1439
at c:/myapptest/tests/bookTest.js:34
libs version
AngularJS v1.2.21
AngularJS-mock v1.2.21
我不知道您实际上在哪里发出Report.query()。getBook函数只返回一个无法解析的承诺,这个承诺永远不会被解析,因为函数中没有任何内容是异步的。
你需要呼叫Report。使用.then()(在book函数中)解析的承诺通过book函数进行查询。之后,在service.getBook().then()中刷新http后端并执行预期操作。
相关文章:
- Javascript在for循环中等待处理请求
- EmberJS:在成功处理请求时解决承诺
- Gmail API 返回 400 个带有批处理请求的错误请求
- 在处理请求工作时显示“正在处理”
- 如何使 node js Express 服务器并行处理请求
- 节点 JS Express 模块是否异步处理请求
- 使用 javascript 使用 fql 进行批处理请求
- 如果可能的话,我应该使用 angularjs $http服务来处理请求还是 jquery ajax
- Node.js中的批处理请求
- 使用javascript动态处理请求字符串
- 当处理请求发布ajax时,如何禁用该表单中的表单(用户无法检查、填写文本、选择下拉列表等)
- 无法处理请求,因为模式对话框或警报处于活动状态
- 如何在.MVC 3 Razor中只触发一个JavaScript函数,而不需要控制器处理请求
- Javascript AJAX待处理请求
- 在Spring中处理请求之前显示等待页面
- 基于已知键数组向Firebase DB发出批处理请求的最有效方法是什么?
- 错误的错误.GrailsExceptionResolver -在处理请求:[GET]时发生NullPointerExce
- Facebook JS批处理请求返回Null
- 即使在用户通过javascript导航离开后,ASP.NET是否仍能继续可靠地处理请求
- 如何正确处理请求-承诺错误