1

我正在使用 Eliom 构建一个新项目,并且在使用 OUnit 为单元测试设置编译过程时遇到了麻烦。

我有两个文件:

 Js_Client_Code.eliom - contains all of the client side code
 Project.eliom - contains all of the server side code (including opening Js_Client_Code.eliom)

我以这种方式设置了文件,这样我就可以在 Js_Client_Code.eliom 上运行单元测试,而无需使用ocsigenserver.

这是我当前的测试生成文件:

 test: prep unit_tests     

 prep:
     eliomc -infer Js_Client_Code.eliom
     js_of_eliom -linkall -a Js_Client_Code.eliom -o file_a.cma
     eliomc -a -linkall Js_Client_Code.eliom -o file_b.cma

 # Code is here to move the cma files back to the parent directory, since they are written to _client/ and _server/ by default

 unit_tests:
     ocamlfind ocamlc -thread -syntax camlp4o -package ounit,js_of_ocaml.syntax \
     -linkpkg -g -o UnitTests file_a.cma file_b.cma unit_tests.ml

make test在 shell 中运行会产生

 File "unit_tests.ml", line 1:
 Error: Error while linking file_a.cma(Js_Client_Code):
 Reference to undefined global `Eliom_client'

我是否误解了 Eliom/Js_of_ocaml 编译过程,或者只是以错误的方式解决这个问题?

4

1 回答 1

0

您根本没有链接 eliom 库,因此它当然缺少所有外部模块。

老实说,我认为您不会设法以这种方式对依赖于 eliom 的模块进行单元测试。单独对非 eliom 部分进行单元测试可能会更容易,并进行基于浏览器的端到端测试(有很多框架)。

如果您真的想尝试,eliom(或 ocsigenserver)的手册中有解释以静态链接。

于 2017-02-25T15:44:31.273 回答