だから私はいくつかのsphinxdoc拡張を書いた。(PyCharmの)カバレッジを持つsphinxdoc拡張機能をユニットテストする方法は?
from docutils import nodes
from docutils.statemachine import StringList
from sphinx.util.compat import Directive
class SvnRevisionDirective(Directive):
"""Directive to display subversion revision of the path.
"""
has_content = True
required_arguments = 1
optional_arguments = 1
final_argument_whitespace = False
option_spec = {}
def run(self):
path = self.arguments[0]
# rev = svntools.Revision(path)
rev = 42
paragraph = nodes.paragraph()
self.state.nested_parse(
StringList([
'**Revision:** r%d' % rev
]), 0, paragraph)
return [paragraph]
def setup(app):
"""Directive framework code.
"""
app.add_directive('svnrevision', SvnRevisionDirective)
拡張へのパスは、ドキュメントのconf.py
それは次のように使用することができるでextensions
に追加された後に:(それは最も単純なものであるので、一例として用いた)これ
.. svnrevision:: mypackage/__init__.py
と生成されます。
リビジョン: R42
はちょうどそれが動作していることをテストするには私はtests/testproj
ディレクトリを作成し、docs
ディレクトリ、conf.py
ファイル、およびディレクティブを含むindex.rst
ファイル、および使用とそれを埋めることができます。
import os
import pytest
DIRNAME = os.path.dirname(__file__)
@pytest.mark.django_db
def test_svnrevision(monkeypatch):
testprojdir = os.path.join(DIRNAME, 'testproj')
monkeypatch.setenv('PYTHONPATH', testprojdir, os.pathsep)
monkeypatch.setenv('DJANGO_SETTINGS_MODULE', 'testingapp.settings')
monkeypatch.chdir(DIRNAME)
cmd = 'sphinx-build -bhtml -a -E testproj/docs testproj/build'
os.system(cmd)
が、これはテストとコードの間の距離の多くを与え、 PyCharmの下で実行されたときには少なくともコードカバレッジを与えません。
私は可能これで例えばと類似の直接もっと何か、:
def test_svnrevision():
rst = """
.. svnrevision:: mypackage/__init__.py
"""
svndirective = SvnRevisionDirective(...., rst, ...)
result = svndirective.run()
assert result.___ == '**Revision:** 42'
をご希望ですか?
関連するスフィンクスの問題:https://github.com/sphinx-doc/sphinx/issues/3458 – marbu