refute <-> assertの逆をするライブラリ
refute
azu/refute というAssertionライブラリを書きました。
refute
というのはassert
の逆、つまりassert.not*
を行うAssertionのことです。
これはBuster.JSのAssertionライブラリであるbusterjs/refereeが由来のものです。
Installation
npm install --save-dev refute
Usage
refute
は既存のassert(Node’s Assert)を受け取って動作するようになっています。
var assert = require("assert");
var refute = require("refute")(assert);
API
以下のようにassert
と逆にfalse
だったらパスするようなAPIが用意されてます
。
refute(false);
refute.equal = assert.notEqual.bind(assert);
refute.strictEqual = assert.notStrictEqual.bind(assert);
refute.deepEqual = assert.notDeepEqual.bind(assert);
refute.throws = assert.doesNotThrow.bind(assert);
初期化の方法からもわかるように、内部的にassert
を使っていて判定を逆転させているだけです。
実行例
var assert = require("assert");
var refute = require("refute")(assert);
describe("refute-test", function () {
it("refute", function () {
refute(false);// not true is pass
});
it("refute.equal", function () {
refute.equal("string", "non-string");// pass
});
it("refute.deepEqual", function () {
var obj = {
a: 1
};
var expected = {
b: 1
};
refute.deepEqual(obj, expected);// pass
});
it("refute.throws", function () {
refute.throws(function(){
assert(true);
});
});
});
power-assertとの連携
refute
はpower-assertとも一緒に使うこともできます。
1: require("assert")
へ require("power-assert")
Henkou
- var assert = require("assert");
+ var assert = require("power-assert");
2: espowerの設定でoptions.patternsにrefute.*
メソッドをそれぞれ追加します
require('espower-loader')({
// directory where match starts with
cwd: process.cwd(),
// glob pattern using minimatch module
pattern: 'test/**/*.js',
// options for espower module
espowerOptions: {
patterns: [
"assert(value, [message])",
"refute(value, [message])",
"assert.ok(value, [message])",
"assert.equal(actual, expected, [message])",
"refute.equal(actual, expected, [message])",
"assert.notEqual(actual, expected, [message])",
"assert.strictEqual(actual, expected, [message])",
"refute.strictEqual(actual, expected, [message])",
"assert.notStrictEqual(actual, expected, [message])",
"assert.deepEqual(actual, expected, [message])",
"refute.deepEqual(actual, expected, [message])",
"assert.notDeepEqual(actual, expected, [message])"
]
}
});
詳しくは espower.config.js と mocha.opts を見るといいと思います。
おわりに
azu/refuteはコンセプトの証明的な感じなので、あんまり実用的ではないかもしれませんが、
assert.not
と違いrefute
という否定版があるとテスト書くときに迷いが減るので自分はこの考え方が結構好きです。
assert.ok
があるのに対して assert.ng
がないので、assert(!bool)
と書くのが何かいやなので、refute(bool)
とかけたらいいなーと思って書きました。
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。