如何从Angular.js模块获取资源以进行茉莉花测试

时间:2013-05-10 15:50:26

标签: unit-testing angularjs jasmine

我有一个包含项目资源的模块,代码如下:

editor_services.js

var editorServices = angular.module('editorServices', ['ngResource']);
editorServices.factory('Project', ['$resource', '$http',function($resource, $http){ 
//...etc

现在我想为期望项目资源作为参数的控制器编写测试。如何从editorServices变量中获取此工厂创建的项目资源实例?

1 个答案:

答案 0 :(得分:7)

这是一个工作示例,如何以角度测试资源(或http) http://plnkr.co/edit/kK5fDFIVpyZTInH1c6Vh?p=preview

基本设置是:

  1. 在您的测试中加载angular-mocks.js。这将用模拟版本替换$httpBackend。请参阅:http://docs.angularjs.org/api/ngMock。$ httpBackend

  2. 在您的测试通话$httpBackend.expect()中创建期望被嘲笑。

  3. 如果要模拟服务器响应调用$httpBackend.flush()

  4. 有一点需要注意,茉莉花的正常.toEqual()不能与$resource一起使用,所以你必须像这样创建自定义匹配器:

  5.   beforeEach(function() {
        this.addMatchers({
          // we need to use toEqualData because the Resource hase extra properties 
          // which make simple .toEqual not work.
          toEqualData: function(expect) {
            return angular.equals(expect, this.actual);
          }
        });
      });