如何对使用AngularJS中的另一个工厂的异步工厂进行单元测试?

赞比西河

我正在尝试为我的databaseContacts工厂编写一些单元测试,由于存在许多复杂性,我对如何实际编写它们非常迷失。

这是我要测试的工厂:

 .factory('databaseContacts', 
   function (getDatabaseContactsFromDB ){

     return {
       getContacts: function(){
         var dbContacts = getDatabaseContactsFromDB.query();
         return dbContacts.$promise.then(function(result){
           return result;
         });
       },
       removeContact: function (contact){
         getDatabaseContactsFromDB.remove(contact);
       },
       addContact: function (contact){
         var addedContact =  getDatabaseContactsFromDB.save(contact);
         return addedContact.$promise.then(function(result){
           return result;
         });
       }
     };
 })

这是getDatabaseContactsFromDB:

 .factory('getDatabaseContactsFromDB', function ($resource){
   return $resource('http://localhost:8000/contacts/');
 })

这是我为测试设置的尝试:

 describe( 'databaseContacts service', function(){
   var databaseContacts, httpBackend;
   beforeEach(function() {
     module('App.contacts');

     inject (function ($httpBackend, _databaseContacts_){
       databaseContacts = _databaseContacts_;
       httpBackend = $httpBackend;
     });
   });
   afterEach(function(){
     httpBackend.verifyNoOutstandingExpectation();
     httpBackend.verifyNoOutstandingRequest();
   });

   it ('should get database contacts', function (){
     //somehow call databaseContacts.getContacts() and nicely mock the return data
   });

 });

我不了解如何模拟所有这些异步调用,也无法在网络上找到可以转化为我的方案的任何示例。我还觉得在另一个工厂内调用一个工厂会使我的代码更加复杂。任何帮助,将不胜感激。

奴隶托马克

打电话时,假设是getContacts,则必须刷新$ httpBackend,并且必须模拟该URL的响应,如下所示:

var storedData;
databaseContacts.getContacts().then(function(data) {
   storedData = data;
});
httpBackend.expect('GET', 'http://localhost:8000/contacts/').respond(<mocked_json_here>)
httpBackend.flush()
expect(storedData).toBeDefined()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何对等待另一个异步任务的AsyncTask进行单元测试?

NUnit:如何对另一个单元测试失败进行单元测试?

配置一个存根工厂,该工厂从单元测试中的延迟返回承诺?

在AngularJS中,如何获得一个工厂函数来引用另一个工厂函数?

AngularJS:如何从工厂调用另一个函数

如何对AngularJS服务/工厂进行单元测试

Angularjs 在另一个工厂中使用工厂值

在另一个工厂中使用工厂是未定义的 - AngularJS

使用另一个文件中的工厂时angularjs中的unpr错误

在进行单元测试时,如何测试调用另一个功能的功能?

如何在angularjs的另一个工厂中使用模块功能

[Angular 7+]:如何在另一个服务规范中对服务进行单元测试?

如何对另一个OSGi捆绑包中的OSGi捆绑包进行单元测试

如何对在其方法内引用另一个actor的actor进行单元测试?

当您的工厂依赖另一个工厂时,如何创建FactoryGirl工厂?

C# 中的简单工厂设计从另一个工厂调用工厂?

如何对一个调用另一个返回承诺的函数进行单元测试?

单元测试的 Makefile 使用它在另一个目录中的对应部分

AngularJS从同一模块将工厂注入另一个工厂

对具有依赖项的AngularJS工厂进行单元测试

如何最好地在另一个使用Pimple进行依赖注入的类中使用对象工厂?

将Angular工厂注入另一个工厂

如何在RSpec的另一个工厂内定义的工厂中定义两个新属性?

如何对一个全局函数(即angularJs中的$ rootScope.functionname)进行单元测试

访问angularjs另一个模块中定义的工厂

angularjs-从另一个模块中的控制器访问工厂

如何对角度2分量是否包含另一个分量进行单元测试

将工厂转移到Laravel 5中的另一个工厂

为什么在另一个工厂内对一个工厂进行依赖注入会失败?