September 21, 2013
location object と anchor element
JavaScript で Unit Test を書こうとした時、その関数が location object を 処理したり、URL の文字列からホスト名などを取得したい場合、anchor element を生成して location object の代わりに使うという方法が stack overflow にあった。
testem とか使ってテストをする場合、location.href に値を入れると画面遷移してしまうので、別のオブジェクトを用意して使えばよい。
例: URL 文字列からホスト名を取得
var mylocation = document.createElement('a');
mylocation.href = 'http://example.com/path/to/file';
var hostname = mylocation.hostname;
例: アクセスしているURLのパラメータを削除した文字列を返す関数とそのテスト
// Test
describe('callMyFuncTest', function(){
beforeEach(function(){
myNS.location = document.createElement('a');
});
afterEach(function(){
myNS.location = window.location;
});
it('should return url without query string', function(){
myNS.location.href = 'http://example.com/path?query=string';
expect(myNS.removeQueryStr()).toBe('http://example.com/path');
});
});
// Function
var myNS = {
location: window.location
};
myNS.removeQueryStr = function(){
var l = myNS.location;
return l.protocol+'://'+l.hostname+l.pathname;
}
コードの方で少し工夫する必要はあるけど、一応これでテストできる。
参照: MDN