FakeSphinx は Sphinx 1.2系では動かない
昨日見かけた FakeSphinx を自分のテストコードの参考にしようといじっていたのですが、
その際に FakeSphinx は Sphinx 1.2系では動かないことが判明しました。
File "/Users/tkomiya/work/sphinx-contrib/sadisplay/tests/test_directive.py", line 29, in setup app = FakeSphinx() File "/Users/tkomiya/work/sphinx-contrib/sadisplay/tests/test_directive.py", line 19, in __init__ self.config = Config(None, None, None, None) File "/Users/tkomiya/work/sphinx-contrib/sadisplay/foo/lib/python2.7/site-packages/Sphinx-1.2b3-py2.7.egg/sphinx/config.py", line 217, in __init__ if "extensions" in overrides: TypeError: argument of type 'NoneType' is not iterable
パラメータの解釈が変わっていたり、必要な属性の初期化などが不足してしまっているようです。
実装を参考にするのは諦めて、インターフェースだけ参考にしたのがこちらになります。
どういうインターフェースにすると使いやすいのか模索中ですが、
@with_app デコレータ (Sphinx 本体の tests/util.py 由来)と @with_parsed デコレータ (FakeSphinx 由来)を使って
こういったテストを書くことができます。
もう少しインターフェースを模索していこうと思うので、Sphinx 拡張の作者からのツッコミをお待ちしております。
余談
Sphinx (というか docutils) が一度インストールしたディレクティブやロールを開放する方法を提供していないので、
setup() 関数でディレクティブを登録して、teardown() 関数で登録解除するようなテストが書けません。
状態を持ったテストになってしまうのはとても残念ですね。
なんとかならないものでしょうか…