破坏 has_error 会导致测试出错

aar*_*len 4 lua unit-testing lua-busted

我正在尝试使用busted对lua项目进行单元测试。我有一个看起来像这样的模块:

\n\n
-- src/rom/apis/display.lua\n\nlocal _displayModes = {\n  single = 1,\n  mirrored = 2,\n  extended = 3,\n  immersive = 4\n}\n\nlocal _validMode = function(mode)\n  retVal = false\n  for k,v in pairs(_displayModes) do\n    if mode == v then retVal = true break end\n  end\n  return retVal\nend\n\nlocal _setMode = function (mode)\n  if _validMode(mode) then\n    _config.mode = mode\n  else\n    error("INVALID DISPLAY MODE: "..mode)\n  end\nend\n\ndisplay = {\n  mode = _displayModes,\n  setMode = _setMode\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

在我的规范中,我试图断言 setMode 返回错误:

\n\n
local displayModule = require("rom/apis/display")\ndescribe("#API #Display", function()\n  describe("with single monitor", function()\n    setup(function()\n      local _p = {\n        monitor = {\'foo\'}\n      }\n      mockPeripherals(_p)\n    end)\n\n    it("should not setMode with invalid mode", function()\n      assert.has_error(display.setMode(100), "INVALID DISPLAY MODE: 100")\n    end)\n  end)\nend)\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我运行规范时,由于函数中的错误而出现错误。这是控制台输出:

\n\n
$ busted \xe2\x97\x8f\xe2\x97\x8f\xe2\x97\x8f\xe2\x97\x8f\xe2\x9c\xb1 4 successes / 0 failures / 1 error / 0 pending :\n0.001444 seconds\n\nError \xe2\x86\x92 test/spec/rom/apis/display_spec.lua @ 32\n#API #Display with single monitor should not setMode with invalid mode ./src/rom/apis/display.lua:32: INVALID DISPLAY MODE: 100\n\nstack traceback:    ./src/rom/apis/display.lua:32: in function \'fn\'     test/spec/rom/apis/display_spec.lua:34: in function <test/spec/rom/apis/display_spec.lua:32>\n
Run Code Online (Sandbox Code Playgroud)\n\n

它出现了我期望的错误,但问题是测试应该通过,因为我断言它返回了正确的错误。

\n

dau*_*tor 5

您需要将出错的调用包装在函数中:

it("should not setMode with invalid mode", function()
  assert.has_error(function() display.setMode(100) end, "INVALID DISPLAY MODE: 100")
end)
Run Code Online (Sandbox Code Playgroud)