问题描述
我看了一下,好像还是语义化的,非常神奇,这个特性是怎么用的呢?
Then 'I should be served coffee' do @machine.dispensed_drink.should == 'coffee'end
问题解答
回答1:这个不是 Rails 的东东,这是 Cucumber 的 steps definition,Cucumber 是一个 BDD 的验收测试框架,你看到的这个部分就是测试断言的一段代码。Cucumber 采用的是一种接近自然语言的 DSL,所以语法很人性化。不过程序员本身不太追求 Cucumber 的风格,这个多用于商用化的测试脚本。程序员本身更偏爱程序化的语法,适当的语义化就足够了,在 Ruby 的世界里,MiniTest 和 RSpec 这两类测试框架更受欢迎一些。
补充,仔细想了一下,这也可能不是 Cucumber。我一开始认为是它是因为 Then 这个方法,但是 Cucumber 似乎是在 Scenario 里才用 Then 吧?(记忆模糊)
若说是 RSpec 之类,有 Then 吗?也许是扩展了 DSL?有可能,所以武断认为是 Cucumber 可能是错的。
但无论如何,这肯定是测试代码,不属于 Rails 本身。
回答2:从用处来说,feature是用来做功能特性测试用例的,不仅仅是局限于Cucumber, RSpec也可以用这个,比如这里https://github.com/agilejzl/blog-eye/tree/master/spec/features,@nightire 配合gem ’rspec-example_steps’是可以有 Then 类的流程测试的。
回答3:就是cucumber的代码。Then 位于.feature文件用,用来描述过程,或者_steps.rb文件中用来解析过程。上面提到的明显是后面一种。他位于../features/step_definitions/路径下。