文档中包含的 julia 文档字符串中的 jldoctest 块,但未对它们进行 运行 测试

jldoctest blocks in julia docstrings included in documentation but tests not run on them

我正在学习 Julia,我正在尝试以 REPL examples

的形式将 doctests 包含在函数的 doctrings 中

我无法让那些 doctests 成为 运行:当我在预期输出中包含错误时没有任何反应。

markdown 源中 jldoctest 块的测试是 运行。

这是我的测试设置:

$ tree DocTests/
DocTests/
├── docs
│   ├── make.jl
│   └── src
│       ├── index.md
└── src
    └── DocTests.jl

6 directories, 13 files

具有以下DocTests/src/DocTests.jl模块内容:

module DocTests

export test

"""
    test(x)

```jldoctest
julia> test(2)
4
```
"""
test(x) = x+1

end

以下 DocTests/docs/make.jl 文档构建说明:

push!(LOAD_PATH, "../src/")
using Documenter, DocTests

makedocs(sitename="Testing doctests",
    doctest = true,
)

以及以下 DocTests/docs/src/index.md 降价来源:

 ```@autodocs
Modules = [DocTests]
```

### Just testing jldoctests

```@meta
DocTestSetup = quote
    using DocTests
end
```

```jldoctest
julia> test(2)
5
```

```@meta
DocTestSetup = nothing
```

这就是我构建文档时发生的情况:

$ cd DocTests/docs/
$ julia make.jl
[ Info: SetupBuildDirectory: setting up build directory.
[ Info: Doctest: running doctests.
┌ Error: doctest failure in src/index.md:14-17
│ 
│ ```jldoctest
│ julia> test(2)
│ 5
│ ```
│ 
│ Subexpression:
│ 
│ test(2)
│ 
│ Evaluated output:
│ 
│ 3
│ 
│ Expected output:
│ 
│ 5
│ 
│   diff =
│    Warning: Diff output requires color.
│    53
└ @ Documenter.DocTests ~/.julia/packages/Documenter/zbb48/src/DocTests.jl:364
[ Info: ExpandTemplates: expanding markdown templates.
[ Info: CrossReferences: building cross-references.
[ Info: CheckDocument: running document checks.
[ Info: Populate: populating indices.
[ Info: RenderDocument: rendering document.
[ Info: HTMLWriter: rendering HTML pages.

正如你所看到的,只有markdown源中的测试是运行(预期输出5),而不是函数docstring中的测试(预期输出4)。

在我的浏览器中加载 build/index.html 表明该函数的文档已经生成。特别是,html 文件包含这段代码:

<div><pre><code class="language-julia">test(x)</code></pre><pre><code class="language-julia-repl">julia&gt; test(2) 4</code></pre></div>

我的设置有什么问题?

我正在使用 Julia 1.1.1 版:

$ julia --version
julia version 1.1.1

如果在 makedocs 调用中指定了包含文档字符串的模块,那么文档字符串中包含的文档测试似乎只是 运行。

按如下方式修改文件 DocTests/docs/make.jl 应该会导致 doctest 按预期失败:

push!(LOAD_PATH, "../src/")
using Documenter, DocTests

DocMeta.setdocmeta!(DocTests, :DocTestSetup, :(using DocTests); recursive=true)

makedocs(
    sitename = "Testing doctests",
    modules  = [DocTests],
    doctest  = true,
)

请注意,必须在用于评估 doctests 的沙箱内调用 using DocTests。文件 DocTests/docs/src/index.md@meta 块中的调用仅将 DocTests 引入此文件中的 doctests 范围。 DocTests 模块的文档字符串中的 doctests 范围不受影响,因此需要在上面的清单中额外调用 DocMeta.setdocmeta!,请参阅 Documenter.jl documentation.