由于bash没有一流的函数,因此我通过将字符串传递给函数来模拟匿名函数,然后由eval对其进行求值。

it() {
    echo "$1" # prints the description of the spec
    beforeEach # a setup function
    eval "$2"

    if (($? == 0)); then
        # do something
    fi

    afterEach  # a cleanup function
}

it "should echo something" '{
  echo "something"
}'

这样可以编写非常简洁的测试(它定义了规范)。现在,我想知道这是否是对eval的有效使用。

编辑

我知道匿名函数字符串中不需要打开{和关闭},只是因为它类似于Jasmine之类的东西。

编辑
pseudo anonymous function实际上是一个测试,这意味着在测试结束时,会出现类似
[[ var == 'foo' ]]

或者
((i > 10))

即某种测试(或用XUnit术语断言)。除了返回码然后再求值,它不需要返回任何东西,并且如果返回码为0(成功),则说明以绿色打印,否则以红色打印(测试失败)。

最佳答案

如果这项工作能完成,那么您(最好是其他人)绝对会理解它是如何工作的。

我已经为测试用例自动化编写了类似的代码不止一两次,但是我承认它会变得很繁琐,尤其是当您从简单开始然后让其有机地增长时。

对于它的值(value),我想提出一种风格上的改进;

if eval "$2"; then
  # something

或者如果“某物”是一个简单的命令,则很老
eval "$2" && # something

话虽如此,如果您可以完全避免使用eval,则可能会更好,但这取决于您的测试用例。
$2 && # something

关于bash - 在bash中实现匿名功能是否可行(必要时甚至使用eval)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12299676/

10-16 03:56