mocha-phantomjsでlocalToRemoteUrlAccessEnabled
ってイケるんやろかと思いつつやってみないと信用しないタイプなのでやってみた
sample.js
var Sample = (function() {
function Sample() {
};
Sample.prototype.test = function() {
var d = $.Deferred();
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://blog.kinjouj.net");
xhr.onload = function() {
d.resolve(xhr.status);
};
xhr.onerror = function() {
d.resolve(500);
};
xhr.send(null);
return d.promise();
};
return Sample;
})();
まぁ普通に考えたらクロスドメインなリクエストがサーバー側でAccess-Control-Allow-Originなあれが指定されてないと出来ないけれども、phantomjsにはlocalToRemoteUrlAccessEnabledっていうのがあるわけで
test/runner.html
<!DOCTYPE html>
<html>
<head>
<title>Mocha</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="vendor/mocha.css" />
<script type="text/javascript" src="vendor/mocha.js"></script>
<script type="text/javascript" src="vendor/chai.js"></script>
<script type="text/javascript" src="../jquery.js"></script>
<script type="text/javascript" src="../sample.js"></script>
</head>
<body>
<div id="mocha"></div>
<script>
chai.should();
var expect = chai.expect;
mocha.setup({ "ui": "bdd", "timeout": 3000 });
</script>
<script src="sample_spec.js"></script>
<script>
if (window.mochaPhantomJS) {
mochaPhantomJS.run();
} else {
mocha.run();
}
</script>
</body>
</html>
無論普通にこのHTMLにアクセスしてテストしようとするとずっこける訳(それは上記でも書いたようなクロスドメインな件)
test/sample_spec.js
describe("Sample", function() {
it("test", function(done) {
var sample = new Sample();
var p = sample.test();
p.done(function(code) {
expect(code).to.equal(200);
done();
});
});
});
テストを実行する
普通に
mocha-phantomjs --reporter tap test/runner.html
※tapで出力した方が以下のコピペが分かりやすそうな為
で実行すると
1..1 XMLHttpRequest cannot load http://blog.kinjouj.net/. Origin file:// is not allowed by Access-Control-Allow-Origin. not ok 1 Sample test Error loading resource http://blog.kinjouj.net/ (5). Details: Operation canceled # tests 1 # pass 0 # fail 1
まぁ予測通りのエラーになる。で
mocha-phantomjs --reporter tap -s localToRemoteUrlAccessEnabled=true test/runner.html
でやると
1..1 ok 1 Sample test # tests 1 # pass 1 # fail 0
てな感じになる。まぁ前置きが長くなったけど要は、mocha-phantomjsでもlocalToRemoteUrlAccessEnabledが使える模様って事で