我正在使用Purescript并复制了"hello world" app。
测试通过。我故意破坏了测试。
module Test.Main where
import Prelude
import Effect (Effect)
import Euler (answer)
import Test.Assert (assert)
main :: Effect Unit
main = do
assert (answer == 233161)
报告了手工错误,但是错误报告的质量令我担心,因为它无论如何都无法发现错误。 有一个冗长的JS stacktrace,没有引用原始文件或Purescript模块/函数! 这是一款具有1个测试的超级简单应用程序,但是我应该如何在真正的应用程序中进行大量测试呢?
spago test
[info] Installation complete.
Compiling Test.Main
[info] Build succeeded.
/home/dan/demo/pure-script/1/output/Test.Assert/foreign.js:6
if (!success) throw new Error(message);
^
Error: Assertion failed
at Object.main (/home/dan/demo/pure-script/1/output/Test.Assert/foreign.js:6:27)
at Object.<anonymous> (/home/dan/demo/pure-script/1/.spago/run.js:3:32)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
at startup (internal/bootstrap/node.js:282:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
[error] Tests failed: exit code: 1
答案 0 :(得分:2)
从purescript-assert
的{{3}}可以推断出,Test.Assert
模块对于实际测试库的作者来说只是一个超基本的断言库(因为他们无法使用自己的库而不会引起循环依赖)。
因此,不应提供非常好的错误堆栈和位置信息。使用assert的软件包通常会在以下之间进行大量登录:
main = do
Console.log "Testing answer"
Console.log "assert answer is 42"
assert $ answer == 42
Console.log "assert answer is answer to everything"
assert $ answer `isAnswerTo` "everything"
对于更严重的问题,我建议使用README。不幸的是,PureScript的调试和测试故事并不是最出色的,但是该语言确实在其他方面大放异彩。