luassert 库中的断言是否具有类似于内置 `error` 函数的 `level` 参数?
Do the assertions in the luassert library have a `level` parameter similar to the builtin `error` function?
我目前正在使用 busted/luassert 编写测试套件,并且由于我在单独的函数中放置了一些断言,所以我得到的堆栈跟踪不准确。例如,考虑以下测试套件 (a_spec.lua):
local function my_custom_assertion(x) -- 1
assert.is_true(x > 0) -- 2 <-
end -- 3
-- 4
describe("My test suite", function() -- 5
it("they are positive", function() -- 6
my_custom_assertion(-10) -- 7 <-
my_custom_assertion(-20) -- 8 <-
end) -- 9
end) -- 10
当我 运行 它时,我的测试用例失败了,但堆栈跟踪指向第 2 行,所以我无法判断两个断言中的哪一个失败了。
$busted spec/a_spec.lua
◼
0 successes / 1 failure / 0 errors / 0 pending : 0.002242 seconds
Failure → spec/a_spec.lua @ 6
My test suite they are positive
spec/a_spec.lua:2: Expected objects to be the same.
Passed in:
(boolean) false
Expected:
(boolean) true
有没有办法让它指向第 7 行或第 8 行?一种可行的方法是,如果 luassert 的 assert.is_true 函数具有类似于内置 error 函数的级别参数。
查看 luassert 的源代码似乎是 does care about the stack level 但我无法确定此功能是内部功能还是以某种方式向用户公开。
不是通过创建调用 assert.xyzz()
的函数来创建自定义断言,而是创建 returns true
或 false
的函数并将其注册到 assert:register
.
参见 README 中的第二个示例。
事实证明,有一种方法可以解决我的实际问题,即找出触发了哪个断言,而无需更改我编写测试的方式。通过使用 -v
(--verbose
) 选项调用 busted
,它会在断言失败时打印完整的堆栈跟踪,而不是仅提供单个行号。
$ busted -v spec/a_spec.lua
0 successes / 1 failure / 0 errors / 0 pending : 0.003241 seconds
Failure → spec/a_spec.lua @ 6
My test suite they are positive
spec/a_spec.lua:2: Expected objects to be the same.
Passed in:
(boolean) false
Expected:
(boolean) true
stack traceback:
spec/a_spec.lua:2: in upvalue 'my_custom_assertion'
spec/a_spec.lua:7: in function <spec/a_spec.lua:6>
提到第 7 行让我知道哪个断言失败了。
我目前正在使用 busted/luassert 编写测试套件,并且由于我在单独的函数中放置了一些断言,所以我得到的堆栈跟踪不准确。例如,考虑以下测试套件 (a_spec.lua):
local function my_custom_assertion(x) -- 1
assert.is_true(x > 0) -- 2 <-
end -- 3
-- 4
describe("My test suite", function() -- 5
it("they are positive", function() -- 6
my_custom_assertion(-10) -- 7 <-
my_custom_assertion(-20) -- 8 <-
end) -- 9
end) -- 10
当我 运行 它时,我的测试用例失败了,但堆栈跟踪指向第 2 行,所以我无法判断两个断言中的哪一个失败了。
$busted spec/a_spec.lua
◼
0 successes / 1 failure / 0 errors / 0 pending : 0.002242 seconds
Failure → spec/a_spec.lua @ 6
My test suite they are positive
spec/a_spec.lua:2: Expected objects to be the same.
Passed in:
(boolean) false
Expected:
(boolean) true
有没有办法让它指向第 7 行或第 8 行?一种可行的方法是,如果 luassert 的 assert.is_true 函数具有类似于内置 error 函数的级别参数。
查看 luassert 的源代码似乎是 does care about the stack level 但我无法确定此功能是内部功能还是以某种方式向用户公开。
不是通过创建调用 assert.xyzz()
的函数来创建自定义断言,而是创建 returns true
或 false
的函数并将其注册到 assert:register
.
参见 README 中的第二个示例。
事实证明,有一种方法可以解决我的实际问题,即找出触发了哪个断言,而无需更改我编写测试的方式。通过使用 -v
(--verbose
) 选项调用 busted
,它会在断言失败时打印完整的堆栈跟踪,而不是仅提供单个行号。
$ busted -v spec/a_spec.lua
0 successes / 1 failure / 0 errors / 0 pending : 0.003241 seconds
Failure → spec/a_spec.lua @ 6
My test suite they are positive
spec/a_spec.lua:2: Expected objects to be the same.
Passed in:
(boolean) false
Expected:
(boolean) true
stack traceback:
spec/a_spec.lua:2: in upvalue 'my_custom_assertion'
spec/a_spec.lua:7: in function <spec/a_spec.lua:6>
提到第 7 行让我知道哪个断言失败了。