2016-10-18 5 views
0

すべてがうまく動作するページがあります。しかし、このページのコントローラーFeeRuleCtrlのテストでは、コントローラーのコードをテストした後に、別の状態のコントローラーのテストを開始します。ここに私のapp.jsです:間違ったui-router状態からのジャスミンテストコントローラ

$stateProvider 
    .state('root', { 
    url: "/", 
    templateUrl: "<%= Rails.application.routes.url_helpers.client_side_path('admin/fee_suites/root') %>", 
    controller: 'RootCtrl', 
    resolve: { 
     feeSuites: function(FeeSuiteCrud, FeeSuite){ 
     console.log('here'); 
     var feeCrud = new FeeSuiteCrud(FeeSuite); 
     var promise = feeCrud.query(); 

     return promise.then(function(response){ 
      return response; 
     }); 
     } 
    } 
    }) 
    .state('fee-rule', { 
    abstract: true, 
    controller: 'FeeRuleCtrl', 
    template: "<ui-view/>", 
    resolve: { 
     feeTypes: function(FeeSuiteCrud, FeeType){ 
     var feeCrud = new FeeSuiteCrud(FeeType) 
     var promise = feeCrud.query(); 

     return promise.then(function(response){ 
      return response; 
     }) 
     }, 
     feeSuites: function(FeeSuiteCrud, FeeSuite){ 
     var feeCrud = new FeeSuiteCrud(FeeSuite); 
     var promise = feeCrud.query(); 

     return promise.then(function(response){ 
      return response; 
     }); 
     } 
    } 
    }) 
    .state('fee-rule.new', { 
    url: '/new', 
    controller: 'NewCtrl', 
    templateUrl: "<%= Rails.application.routes.url_helpers.client_side_path('admin/fee_suites/feeRule.html') %>", 
    data: { title: 'Add a New Fee Rule' } 
    }) 
    .state('fee-rule.edit', { 
    url: "/edit/:id", 
    controller: 'EditCtrl', 
    templateUrl: "<%= Rails.application.routes.url_helpers.client_side_path('admin/fee_suites/feeRule.html') %>", 
    data: { title: 'Edit Fee Rule' }, 
    resolve: { 
     feeRule: function(FeeSuiteCrud, FeeRule, $stateParams){ 
     var feeCrud = new FeeSuiteCrud(FeeRule); 
     var promise = feeCrud.get($stateParams.id) 

     return promise.then(function(response){ 
      return response; 
     }); 
     } 
    } 
    }); 

両方newedit状態は同じ機能の大部分を共有しているため、私は、抽象状態、fee-ruleを持っています。

私は、ページのアドレス、<host>/admin/fee_suites/newに行くとき、私はネットワーク]タブを検査して作られた4つのサーバーの呼び出しがあります

api/v3/fee_types 
api/v3/fee_suites 
api/v3/fee_suites/8?association=fee_rules 
api/v3/fee_types/9?association=fee_parameters 

は、最初の2はfee-rule状態に解決さです。私はテストにそうように、このの世話をする:

beforeEach(function(){ 
    module(function($provide){ 
    $provide.factory('feeSuites', function(FeeSuite){ 
     feeSuite = new FeeSuite({ 
     id: 8, 
     site_id: 9, 
     active: true 
     }); 

     return [feeSuite]; 
    }); 

    $provide.factory('feeTypes', function(FeeType){ 
     feeType = new FeeType({ 
     id: 9, 
     name: 'Carrier Quotes', 
     value: 'carrier_quotes' 
     }); 

     return [feeType]; 
    }); 
    }); 

    inject(function($injector){ 
    $rootScope = $injector.get('$rootScope'); 
    $controller = $injector.get('$controller'); 
    $httpBackend = $injector.get('$httpBackend'); 
    scope = $rootScope.$new(); 

    $controller("FeeRuleCtrl", { 
     '$scope': scope 
    }); 
    }); 
}); 

最後の2つのサーバーの呼び出しがFeeRuleCtrl内部で作られています。私はそうのようにそれらをテスト:

beforeEach(function(){ 
    var JSONResponse = {"master":[{"id":29,"fee_suite_id":8,"fee_parameter_id":1,"name":"American Express Fee","multiplier":0.045,"addend":0.0,"order":1,"order_readonly":true,"created_at":"2016-10-17T14:20:08.000-05:00","updated_at":"2016-10-17T14:20:08.000-05:00"},{"id":30,"fee_suite_id":8,"fee_parameter_id":2,"name":"Discover Fee","multiplier":0.045,"addend":0.0,"order":1,"order_readonly":true,"created_at":"2016-10-17T14:20:08.000-05:00","updated_at":"2016-10-17T14:20:08.000-05:00"},{"id":31,"fee_suite_id":8,"fee_parameter_id":3,"name":"MasterCard Fee","multiplier":0.045,"addend":0.0,"order":1,"order_readonly":true,"created_at":"2016-10-17T14:20:08.000-05:00","updated_at":"2016-10-17T14:20:08.000-05:00"},{"id":32,"fee_suite_id":8,"fee_parameter_id":4,"name":"Visa Fee","multiplier":0.045,"addend":0.0,"order":1,"order_readonly":true,"created_at":"2016-10-17T14:20:08.000-05:00","updated_at":"2016-10-17T14:20:08.000-05:00"}]}; 

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

    JSONResponse = {"master":[{"id":25,"fee_type_id":9,"name":"UPS Published Quote","value":"ups_published_quote","parameter_type":"currency","created_at":"2016-10-17T14:20:08.000-05:00","updated_at":"2016-10-17T14:20:08.000-05:00"},{"id":26,"fee_type_id":9,"name":"FedEx Published Quote","value":"fedex_published_quote","parameter_type":"currency","created_at":"2016-10-17T14:20:08.000-05:00","updated_at":"2016-10-17T14:20:08.000-05:00"},{"id":27,"fee_type_id":9,"name":"UPS Negotiated Quote","value":"ups_negotiated_quote","parameter_type":"currency","created_at":"2016-10-17T14:20:08.000-05:00","updated_at":"2016-10-17T14:20:08.000-05:00"},{"id":28,"fee_type_id":9,"name":"FedEx Negotiated Quote","value":"fedex_negotiated_quote","parameter_type":"currency","created_at":"2016-10-17T14:20:08.000-05:00","updated_at":"2016-10-17T14:20:08.000-05:00"}]}; 

    $httpBackend.expectGET('/api/v3/fee_types/9?association=fee_parameters').respond(JSONResponse); 

    $httpBackend.flush(); 
}); 

it('should set currentFeeRuleNum', function(){ 
    expect(scope.FeeSuite.currentFeeRuleNum).toEqual(4); 
}); 

私は私のテストを実行すると、私は次のエラーを取得:

Error: Unexpected request: GET /api/v3/fee_suites/ 

を私はテストは、コンソールに出力しますので、それはroot状態の解決機能feeSuitesから来ている知っています「ここ」という言葉を記録する。

rootの状態で、テストが停止せず、RootCtrlのテストを開始するように見えない理由がわかりません。状態fee-ruleが抽象であるという事実とは関係がありますか?またNewCtrlが定義されていますが、それは空です。

答えて

0

別のキーワードでいくつかのグーグルが検索された後、私のテストでは、FeeRuleCtrlの中に$ state変数を偽装する必要があります。それは問題を解決しました。

関連する問題