2016-08-08 35 views
0

Ich habe einen REST-Client geschrieben, der Teil einer angularJS-Anwendung sein soll, für die ich Tests schreiben möchte; Ich habe es mit Jasmine versucht (mit Passthrough auf dem $ httpBackend), konnte es aber nicht dazu bringen, mit dem echten Endpunkt zu sprechen (was eine Voraussetzung ist).

Kennt jemand eine sinnvolle Bibliothek, die dies ermöglicht? Oder alternativ eine Art, Jasmine in die Unterwerfung zu zwingen?

+0

Sie könnten testen mit einem e2e-Test mit Transporteur oder etwas anderes – user3232739

+0

warum nicht verwenden Mocha injizieren, wenn Sie möchte nur Back-End-Rest-APIs testen – MarkoCen

+1

Wenn Sie mit echten HTTP-Anfragen vom Client zum Server testen möchten, müssen Sie $ httpBackend nicht verwenden. Ich habe Tests in Jasmin geschrieben, die echte Endpunkte verlangten. Jasmine unterstützt Async-Tests, so dass es kein Problem ist, Tests zu schreiben, die mit echten Ruhe-APIs kommunizieren. – thadam

Antwort

0

müssen Sie zuerst $ httpbackend

describe('MyController', function() { 
var $httpBackend, $rootScope, createController, authRequestHandler; 

// Set up the module 
    beforeEach(module('MyApp')); 

    beforeEach(inject(function($injector) { 
// Set up the mock http service responses 
$httpBackend = $injector.get('$httpBackend'); 
// backend definition common for all tests 
authRequestHandler = $httpBackend.when('GET', '/auth.py') 
         .respond({userId: 'userX'}, {'A-Token': 'xxx'}); 

// Get hold of a scope (i.e. the root scope) 
$rootScope = $injector.get('$rootScope'); 
// The $controller service is used to create instances of controllers 
var $controller = $injector.get('$controller'); 

createController = function() { 
    return $controller('MyController', {'$scope' : $rootScope }); 
}; 
    $httpBackend.when('GET', "/api/rest/").respond(data_to_respond); 
    })); 

nächsten Schreibtestfälle

it('getTypes - should return 3 car manufacturers', function() { 
     service.getTypes().then(function(response) { 
      //expect will be here 
     }); 
     $httpBackend.flush(); 
    }); 
+0

Wie ich in meiner Frage gesagt habe, möchte ich die Antworten nicht fälschen - ich möchte, dass mein Client mit einem echten Server kommuniziert. – Fallso

+0

nicht möglich, beim Testen müssen Sie die Antwort fälschen –

+0

Daher frage ich, ob es andere Test-Frameworks gibt, wo Sie nicht müssen, weil ich sicher war, dass das eine Einschränkung von Jasmine war :) – Fallso