Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 仅强制严格RSpec DSL_Ruby_Rspec - Fatal编程技术网

Ruby 仅强制严格RSpec DSL

Ruby 仅强制严格RSpec DSL,ruby,rspec,Ruby,Rspec,作为一个天真的程序员,我在测试中犯了一个巨大的错误: it_behaves_like 'a Database' do def build_content # ... end end 在一些随机错误和使用共享规范添加更多测试之后,我意识到这样的代码从一开始就是错误的,并且消耗了一些有价值的测试。它应该一直是: it_behaves_like 'a Database' do before :all do def build_content # ...

作为一个天真的程序员,我在测试中犯了一个巨大的错误:

it_behaves_like 'a Database' do
  def build_content
    # ...
  end
end  
在一些随机错误和使用共享规范添加更多测试之后,我意识到这样的代码从一开始就是错误的,并且消耗了一些有价值的测试。它应该一直是:

it_behaves_like 'a Database' do
  before :all do
    def build_content
      # ...
    end
  end
end  
在这次“aha moment”让我对RSpec的了解更进一步,现在我想知道为什么任何人都应该在RSpec DSL名称空间中编写普通的ruby代码,我真的只想知道一件事:

如何在我的规范中强制使用严格的RSpec DSL,使我的begin/let/it块之外的任何非RSpec的随机ruby代码都是非法的


例如,在我上面的代码中,函数build_content就是我所说的随机ruby代码。第一次在DSL名称空间中声明它时,只应该使用RSpec函数。

为什么要编写普通的ruby代码…-因为,你知道,RSpec DSL是普通的ruby代码所以我不知道怎样才能把两者区分开来。如果您使用minitest,您就不会有这样的困惑我知道。。。但是minitest有更多的Ruby代码-P我使用RSpec的原因是它的DSL。即使在实践中它仍然是Ruby代码,我还是希望在那些只需要DSL的领域中使用DSL。那么?只是不要在那里编写常规方法。在ruby中很难实施这种策略。这是到目前为止我得到的唯一答案:考虑到通常DSL是通过某种类型的eval实现的,我对强制实施“严格DSL”模式的希望很低。即便如此,我真的很喜欢这种设计策略,让明显愚蠢的事情,以一种清晰而明显的方式失败。