文档中包含的 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> 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.
我正在学习 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> 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.