Eliom框架中的单元测试

时间:2017-02-25 02:48:25

标签: unit-testing ocaml js-of-ocaml ocsigen

我正在使用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编译过程,或者只是以错误的方式解决这个问题?

1 个答案:

答案 0 :(得分:0)

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

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

如果您真的想尝试,可以通过eliom(或ocsigenserver)的手册进行静态链接。