mocha-phantomjsでlocalToRemoteUrlAccessEnabled

2014-03-03T00:00:00+00:00 JavaScript

ってイケるんやろかと思いつつやってみないと信用しないタイプなのでやってみた

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が使える模様って事で

angular.jsをやってみる (4) - filter - rspec+glint