简体   繁体   English

承诺中的角度测试承诺

[英]angular testing promise within a promise

I have code that works. 我有工作的代码。 But I have no idea how to test it. 但是我不知道如何测试。 A FeeRule has many FeeParameters. 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 and getFeeParameters return promises from $http.get(). getFeeRules和getFeeParameters从$ http.get()返回承诺。

My test: 我的测试:

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]);
});

Doesn't seem the second promise gets resolved as I get the following error: 出现以下错误时,第二个承诺似乎没有得到解决:

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' }) ].

use it twice it will work 使用两次,它将起作用

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

and instead of expect get use when('GET',URL) 而不是期望使用when('GET',URL)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM