调用另一个源块

时间:2015-06-23 13:43:59

标签: javascript org-babel

我试图在一个有文化的程序中使用org-babel进行简单的单元测试。

我的想法是我定义一个函数的主体,就像这样

#+NAME: square
#+BEGIN_SRC js :var x=0
return x*x;
#+END_SRC

当然,我还需要实际创建一个纠结功能,我可以通过

来完成
#+BEGIN_SRC js :noweb tangle :tangle the-script.js
function square(x) {
    <<square>>
}
#+END_SRC

然后我会设置一个测试值表,如此

#+TBLNAME: squares-test-data
| the square of |      is |
|---------------+---------|
|             0 |       0 |
|             1 |       1 |
|            10 |     100 |
|            12 |     144 |
|             4 |      16 |
|             9 |      81 |
|           100 |   10000 |
|           234 | 8273424 | 

问题是,如何使用此数据从单独的块对函数体运行测试,请记住

  • 我不希望测试代码包含在纠结的输出中
  • 对于使用字符串的函数,我不希望表中引用的字符串
  • 我宁愿避免重复&#34;期待&#34;并且&#34;得到了#34;表中的值 - 一个简单的检查或X用于通过/失败将是很好的

基本上,我想做的是这样的事情:

#+BEGIN_SRC js :var table=squares-test-data
// Import square block here somehow?

return table.map(function(row) {
    var input = row[0],
        expected = row[1],
        got = square(input),  // this won't be defined
        passed = got == expected;
    return [input, expected, passed]
});
#+END_SRC

但是这个区块并不知道&#34;另一个街区。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这主要是一个简单的疏忽。

可以&#34;导入&#34;在评估之前以这种方式阻塞到其他块:

#+BEGIN_SRC js :noweb eval
<<code-under-test>>
// run some tests
#+END_SRC

我习惯于使用:noweb tangle我没有意识到还有其他选择。 :noweb eval确保在评估之前纠结块,这就是我想要的。

也就是说,在大多数情况下,我确实发现组织表不能作为输入源,但是我有一个令人满意的替代方案,我已经写过并且会链接到这里帐。