JavaScriptのテスト中にテストに使わない部分がis not definedして落ちるので封印する

2016年3月12日土曜日

JavaScript Node.js

t f B! P L
Node.jsとJasmine-nodeで起こったこと。

load("nashorn:mozilla_compat.js");
とか書いているコードのテストの話。
特殊な状況すぎて誰の役にも立たない可能性がある。




source1.js---------------------------
function create(){
  return "ao is blue";
}

module.exports = create;
-------------------------------------

こんなこと書いてて、
別ファイルに

source.spec.js-----------------------
var create = require("./source1.js");

describe("文字列テスト", function(){
  it("テスト", function(){
    expect(create()).toEqual("ao is blue")
  })
})
-------------------------------------

こう書いてテストする分には大丈夫なんだけど、最初のやつに

source1.js---------------------------
load("nashorn:mozilla_compat.js");

function create(){
  return "ao is blue";
}

module.exports = create;
-------------------------------------

このようにload()が足されると
[ReferenceError: load is not defined]
と出てきてテストが死ぬ。
このよくわからない関数load()は削除するわけにはいかないがテストでは使わないことがわかっているとする。

対処法はload()の前に
load = (typeof load != "undefined") ? load: function(s){return s;};
と書く。importPackageとかやってたらその辺も同じ処理をする。

他にはtry-catchでもいけるらしい。

QooQ