2

Я хотел бы проверить свой ресурс с следующий URL:Тестирование AngularJS ресурс с жасмином

$resource(API_URL+'items/:id', {}); 

Где API_URL равно/приложение/API/

describe('item',function(){ 
    it('should return same item id',function(){ 
     $httpBackend.expectGET(API_URL+'items/1').respond({id:1}); 
     var result = ItemService.item.get({id:1}); 
     $httpBackend.flush(); 
     expect(result.id).toEqual(1); 
    }); 
}); 

Но проблема в том, что этот тест не для какая-то странная причина:

Error: Unexpected request: GET modules/home/partials/home.html 
    No more request expected 
     at $httpBackend 

И когда я добавить косую черту $ httpBackend URL, как это:

$httpBackend.expectGET(API_URL+'/items/1').respond({id:1}); 

Он бросает следующие expection:

Error: Unexpected request: GET /app/api/items/1 
    Expected GET /app/api//items/1 
     at $httpBackend 

Примечание двойной слеш в ожидаемом ГЭТ.

Как это исправить?

Update: Код от ItemService:

var itemService = angular.module("ItemServiceModule", []); 
    itemService.factory("ItemService", [ "$resource", "API_URL", function($resource,API_URL) { 
     var itemService = { 
      item: $resource(API_URL+'items/:id', {}) 
     }; 
     return itemService; 
    }]); 

Update2: Если изменить httpBackend URL как это (просто добавить локальный и не добавлять слэш перед элементов):

 $httpBackend.expectGET('http://localhost:8080'+API_URL+'items/1').respond({id:1}); 

Тогда ошибка это:

Error: Unexpected request: GET /app/api/items/1 
    Expected GET http://localhost:8080/app/api/items/1 
     at $httpBackend 

Обновление3: Если я, например, жесткий код, который API_URL так:

var url = 'app/api/items/1'; 
     $httpBackend.expectGET(url).respond({id:1}); 

Ошибка:

Error: Unexpected request: GET /app/api/items/1 
    Expected GET app/api/items/1 
     at $httpBackend 

Но когда я добавить слеш в начале ВГД, то он запрашивает дома частичные модули/дома/partials/home.html как с API_URL.

Error: Unexpected request: GET modules/home/partials/home.html 
    No more request expected 
     at $httpBackend 
+0

Показать код для 'ItemService' – Chandermani

+0

@Chandermani Хорошо , Я добавил ... – Twisty

+0

Как передается переменная 'API_URL' – Chandermani

ответ

2

Оказалось, проблема была в ui-router. А именно, в следующей конфигурации:

$urlRouterProvider.otherwise("/"); 

Мне просто нужно, чтобы устранить эту конфигурацию в тестах:

beforeEach(module(function ($urlRouterProvider) { 
    $urlRouterProvider.otherwise(function(){return false;}); 
})); 

Найдено это решение на https://github.com/angular-ui/ui-router/issues/212

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