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