有没有人能够使用$ httpBackend构建规范或e2e测试,同时将BreezeJS功能作为您的实体管理器?
这是BreezeJS代码:
function getClientsAll() {
var query = breeze.EntityQuery.from('clients').using($clientJsonResultsAdapter);
return em.executeQuery(query);
}
以下是使用AngularJS $ httpBackend的Jasmine规范的测试代码:
it('should show all clients', function() {
$httpBackend.expectGET(/clients/).respond([ 200, mockData.clients.GET]);
backupModelService.getClientsAll()
.then(function() {
console.log("getClientsAll success");
})
.fail(function() {
console.log("getClientsAll fail");
})
$httpBackend.flush();//error thrown here
});
但是我得到了茉莉花测试失败
Error: No pending request to flush !
这个breeze方法在浏览器中运行良好,但在测试期间不能运行。但是,如果我转换为使用angularJS $ http或$ resource,则此测试将通过。我想知道BreezeJS是否与规范和e2e测试的$ httpBackend不兼容。
感谢您的任何见解。
//编辑---因为史蒂夫的回应而试图调整AJAX
这也失败了。
var success = jasmine.createSpy('success');
var fail = jasmine.createSpy('fail');
spyOn($, 'ajax').andCallFake(function (req) {
var d = $.Deferred();
d.resolve(mockData.clients.GET);
return d.promise();
});
backupModelService.getClientsAll()
.then(success)
.fail(fail);
expect(success).toHaveBeenCalled();
答案 0 :(得分:1)
Breeze不使用Angular的$ http或$资源来发送XHR。它使用jQuery的AJAX实现。因此,使用em.executeQuery(query)
执行的查询将不会通过$ httpBackend。
使用Breeze进行测试时,你应该监视/存根/模拟jQuery的$ .ajax,如this post中所述。
答案 1 :(得分:0)
这不完全正确。 Breeze在v.1.4.4中为$ http添加了一个ajax适配器 这是设置ajax适配器的方法
function configBreeze($q, $http) {
// tell the adapter to use your app module's $http for ajax calls
var ajax = breeze.config.initializeAdapterInstance('ajax', 'angular');
ajax.setHttp($http);
}
在此之后,您将能够在测试中使用$ httpBackend
此处有更多信息 http://www.breezejs.com/documentation/customizing-ajax 和这里 Breeze using angular $http interceptor