承诺中的角度测试承诺

时间:2016-10-14 14:09:12

标签: angularjs jasmine

我的代码有效。但我不知道如何测试它。 FeeRule有许多FeeParameters。

angular.module('feeSuitesApp')
  .controller('RootCtrl', [
    'FeeSuiteCrud',
    'FeeSuite',
    'FeeRule',
    'FeeParameter',
    'feeSuites',
    '$scope',
    '$q',
    function(FeeSuiteCrud, FeeSuite, FeeRule, FeeParameter, feeSuites, $scope, $q){

      $scope.feeSuite = feeSuites[0];

      if($scope.feeSuite){
        getFeeRules().then(function(response){
          $scope.feeRules = response;
          $scope.feeRules.forEach(function(feeRule){
            getFeeParameters(feeRule).then(function(response){
                feeRule.parameter_name = response.name
                feeRule.parameter_type = response.parameter_type;
              });
          });
        });
      }

      function getFeeRules(){
        var feeCrud = new FeeSuiteCrud(FeeSuite, FeeRule);
        return feeCrud.get($scope.feeSuite.id);
      }

      function getFeeParameters(feeRule){
        var feeCrud = new FeeSuiteCrud(FeeParameter);
        return feeCrud.get(feeRule.fee_parameter_id);
      }

getFeeRules和getFeeParameters从$ http.get()返回promises。

我的测试:

it("gets feeRules and their feeParameters", function(){
  var JSONResponse = {"master":[{"id":30,"fee_suite_id":8,"fee_parameter_id":2,"name":"Discover Fee","multiplier":0.045,"addend":0.0,"order":1,"created_at":"2016-09-27T10:12:26.000-05:00","updated_at":"2016-09-27T10:12:26.000-05:00"}]};

  var feeRule = new FeeRule({
      id: 30,
      name: 'Discover Fee',
      fee_suite_id: 8,
      fee_parameter_id: 2,
      multiplier: 0.045,
      addend: 0,
      order: 1
    });

  var feeParameter = new FeeParameter({
    id: 2,
    fee_type_id: 1,
    name: "Discover subtotal",
    value: "discover",
    parameter_type: "currency"
  });

  feeRule.parameter_name = feeParameter.name;
  feeRule.parameter_type = feeParameter.parameter_type;

  $httpBackend.expectGET('/api/v3/fee_suites/8?association=fee_rules').respond(JSONResponse);

  JSONResponse = {"id":2,"fee_type_id":1,"name":"Discover subtotal","value":"discover","parameter_type":"currency","created_at":"2016-09-27T10:12:25.000-05:00","updated_at":"2016-09-27T10:12:25.000-05:00"};

  $httpBackend.expectGET('/api/v3/fee_parameters/2').respond(JSONResponse);

  $rootScope.$digest();
  $httpBackend.flush();
  expect(scope.feeRules).toEqual([feeRule]);
});

当我收到以下错误时,似乎没有解决第二个承诺:

Expected [ FeeRule({ id: 30, name: 'Discover Fee', fee_suite_id: 8,     
fee_parameter_id: 2, multiplier: 0.045, addend: 0, order: 1 }) ] to equal [ 
FeeRule({ id: 30, name: 'Discover Fee', fee_suite_id: 8, fee_parameter_id: 2, 
multiplier: 0.045, addend: 0, order: 1, parameter_name: 'Discover subtotal', 
parameter_type: 'currency' }) ].

1 个答案:

答案 0 :(得分:0)

使用它两次就可以了

$httpBackend.flush();
$httpBackend.flush();

而不是期望在(' GET',URL)

时使用