我正在使用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)
我已经以这种方式设置了文件,因此我可以在不使用ocsigenserver
的情况下对Js_Client_Code.eliom运行单元测试。
这是我目前用于测试的makefile:
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
在shell中运行make test
会产生
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编译过程,或者只是以错误的方式解决这个问题?
答案 0 :(得分:0)
你根本没有链接eliom库,所以当然它缺少所有外部模块。
老实说,我认为你不会设法依赖于eliom的单元测试模块。可能更容易单独测试非eliom部分,并进行端到端的基于浏览器的测试(有很多框架)。
如果您真的想尝试,可以通过eliom(或ocsigenserver)的手册进行静态链接。