/ /ジャスミンエラー$ httpBackendドメインなしの予期しないリクエスト - angularjs、jasmine、httpbackend

ジャスミンエラー$ httpBackendドメインなしの予期しないリクエスト - angularjs、jasmine、httpbackend

$ httpBackendの私のジャスミンテストは、ドメイン名を追加しない限り、うまくいきませんでした。 http://localhost:9808/

このテストはいくつかの異なる環境で使用されるため、私は使用できません http://localhost:9808/

ドメインがなければ、私はこのエラーになります:

キャッチされていないエラー:予期しないリクエスト:GET http://localhost:9808/api/mymethod これ以上のリクエストはありません

    describe("test my service", function () {
"use strict";

var $httpBackend,
myService;

beforeEach(inject(function (_$injector_, _$httpBackend_) {
var $injector = _$injector_;
$httpBackend = _$httpBackend_;

myService = $injector.get("myService");

// this works
//$httpBackend.whenGET("http://localhost:9808/api/mymethod").respond(200, mockData);

// this throws error
$httpBackend.whenGET("/api/mymethod").respond(200, mockData);
}));

afterEach(function () {
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});

it("check service exists and has methods", function () {
expect(myService).toBeDefined();
expect(myService.somemethod).toBeDefined();

$httpBackend.flush();
});
});

私はさらにこれらの行をbeforeEachに追加しようとしました

//これもエラーをスローします

$ httpBackend.when( "GET"、 "/api/mymethod").respond(200、mockData);

//さらにexpectを追加すると、beforeEachにエラーがスローされます。 $ httpBackend.expectGET( "/ api / mymethod");

ドメインを使用せずにこれを動作させる方法に関するアイデアや提案はありますか?

実際にリクエストを行うサービスコードは次のとおりです。

(function(app) {

"use strict";
function MyService(apiService) {
var returnDataObject = [];

apiService.getAll().then(function(result) {
returnDataObject = result.data;
});

this.myMethod = function() {
if(returnDataObject) {
return returnDataObject;
}
else {
return null;
}
};

}

app.service("MyService", MyService);
MyService.$inject = ["APIService"];

})(angular.module("app.mymodule"));

回答:

回答№1は0

あなたは正規表現を使ってURLにマッチさせることができると思います

あなたはできる:

var method = "GET";
var url = "/mymethod";
$httpBackend.when(method, new RegExp("\" + url)).respond(200, mockData);

回答№2の場合は0

さて、この記事を見てから https://stackoverflow.com/questions/29809436/cannot-inject-providers-into-karma-test

下記のbeforeEachをspecファイルに追加することで問題を解決することができました。私は角度v1.5.4と角度uiルータv0.2.18を使用しています

beforeEach(module(function($urlRouterProvider) {
$urlRouterProvider.deferIntercept();
}));