2016-10-18 3 views
0

Ich habe eine Seite, wo alles gut funktioniert. Mein Test für den Controller FeeRuleCtrl dieser Seite, nachdem er den Code dieses Controllers getestet hat, geht jedoch weiter und beginnt, den Controller eines anderen Status zu testen. Hier ist mein app.js:Jasmine Test Controller von falschen UI-Router-Status

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

Ich habe einen abstrakten Zustand, fee-rule, weil sowohl die new und edit Staaten die meisten der gleichen Funktionalität teilen.

Wenn ich auf die Seite Adresse gehen, <host>/admin/fee_suites/new, überprüfen ich die Registerkarte Netzwerk und es gibt 4 Server Anrufe:

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

Die ersten 2 sind Entschlüsse im fee-rule Zustand. Ich kümmere mich um diese wie so im Test:

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

Die letzten 2 Server Anrufe werden innerhalb FeeRuleCtrl gemacht. Ich teste sie wie so:

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

Als ich betreiben meinen Test bekomme ich folgende Fehlermeldung:

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

Ich weiß, es kommt von rootfeeSuites Entschlossenheit Funktion des Staates, da der Test druckt auch auf die Konsole log das Wort 'hier'.

Ich kann nicht herausfinden, warum es scheint, als ob der Test nicht stoppt und beginnt, die RootCtrl im root Zustand zu testen. Könnte es irgendetwas damit zu tun haben, dass der Staat fee-rule abstrakt ist? Auch NewCtrl ist definiert, aber es ist leer.

Antwort

0

Nach etwas mehr googeln mit anderen Schlüsselwörtern, stellt sich heraus, in meinem Test muss ich die Variable $ state in FeeRuleCtrl spotten. Das hat das Problem behoben.

Verwandte Themen