2013-11-03 3 views
5

Я бы хотел использовать реальные $ http-данные для моего модульного теста с помощью метода passThrough().Единичное тестирование AngularJS/Karma с реальными данными XHR/passThrough()

Вот что я до сих пор:

var should = chai.should(); 
beforeEach(module('myApp', 'ngMockE2E')); 
beforeEach(inject(function(_$httpBackend_, _$rootScope_, _$http_) { 
    $scope = _$rootScope_; 
    $http = _$http_; 
    $httpBackend = _$httpBackend_; 
})); 

it.only('blah', function(done) { 
$httpBackend.whenGET('/api/data').passThrough(); 

    $scope.$apply(function() { 
    $http.get('/api/data').success(function(data) { 
    data.should.eql({"foo": "bar"}); 
    done(); 
    }); 
}); 

// Evidently not required with E2E 
//$httpBackend.flush(); 

}); 

Но это дает ошибку:

Unexpected request: GET /api/data 
No more request expected 
Error: Unexpected request: GET /api/data 
No more request expected 

Если я удалить применить называют это тайм-аут.

ответ

2

Скорее всего, вы будете использовать карму в другом порту, чем порт, где доступны сервисы с реальными данными. Если вы можете перенаправить свои запросы на сервер/порт, где работают службы с реальными данными, так что он не встречает CORS, вы сможете заставить его работать. В моем проекте я использую Charles proxy до map urls, чтобы обойти CORS при использовании passThrough(). Вы также можете сделать свои настоящие сервисы данных CORS совместимыми для облегчения работы.

+0

Спасибо, человек. Обычно я бы подождал, чтобы проверить это, прежде чем принимать (или, в моем случае, награду за награду), но ваш ответ кажется, что он абсолютно правильный. Не могу поверить, что я об этом не думал. Кроме того, я не слышал (хотя название звучит знакомо) Charles proxy. – forivall

Смежные вопросы