私が取り組んでいる javascript/jquery ライブラリの単体テストを作成しています。多くのクロスドメイン Ajax リクエストを作成する必要があり、次のシナリオを試してシミュレートするためにSinon.jsをいじろうとしています。
- AJAX「PUT」クロスドメインリクエストを行います
x-domain-abc.com/somestorage
- 認証用のカスタムヘッダーを含めています
- これにより、プリフライト OPTIONS リクエストがトリガーされます
- リクエストは fakeServer によってキャッチされ、いくつかのカスタム ヘッダーで応答する必要があります (プロバイダーが追加することを望んでいるもの ;-)
- その後、実際の「PUT」が実行され、これも fakeServer によってキャッチされ、それに応じて応答されます。
私のリクエストは次のようになります。
$.ajax({
url: url + '?_=' + Date.now(),
type: 'PUT',
data: document,
async: true,
crossdomain: true,
headers : {
Authorization: 'Basic ' + Base64.encode(
priv.user + ':' + priv.pass
)
},
success: function () {
// do sth
},
error: function () {
// do sth else
}
});
私のテストモジュールでは、現在これを行っています:
test ("Put", function(){
var o = generateTools(this);
// lib invocation
o.jio = JIO.newJio({
"type": "dav",
"username": "davput",
"password": "checkpwd",
"url": "https://ca-davstorage:8080"
});
// put non empty document
o.addFakeServerResponse("PUT", "put1", 201, "HTML RESPONSE");
o.spy (o, "value", {"ok": true, "id": "put1"},
"Create = PUT non empty document");
// the JSON "document" that should be stored
o.jio.put({"_id": "put1", "title": "myPut1"}, o.f);
o.clock.tick(5000);
o.server.respond();
o.jio.stop();
});
O
以下が含まれます:
generateTools = function (sinon) {
var o = {};
o.t = sinon;
o.server = o.t.sandbox.useFakeServer();
o.clock = o.t.sandbox.useFakeTimers();
o.clock.tick(base_tick);
o.spy = basicSpyFunction;
o.tick = basicTickFunction;
...
o.addFakeServerResponse = function (method, path, status, response) {
var url = new RegExp('https:\\/\\/ca-davstorage:8080\\/' + path +
'(\\?.*|$)');
o.server.respondWith(method, url,
[status, { "Content-Type": 'application/xml' }, response]
);
}
return o;
},
質問:
OPTIONS/preflight はブラウザーによって内部的に処理されるものであり、私がアクセスしたり影響を与えたりすることはできないため、テストすることは意味がありますか?
そうでない場合、CORS リクエストで何をテストすればよいですか?