Rspec中describe和context不同

转自  http://lmws.net/describe-vs-context-in-rspec

学习rspec,不太理解describe和context。google了一下,找到这篇文章,感觉说的有些道理

1 在Rspec的世界里,我们经常看到人们使用descirbe代码块和context代码块 例如

1 describe "launch the rocket" do
2   context "all ready" do
3   end
4
5   context "not ready" do
6   end
7 end

那么context和descript有啥不同呢

According to the rspec source code, “context” is just a alias method of “describe”, meaning that there is no functional difference between these two methods. However, there is a contextual difference that’ll help to make your tests more understandable by using both of them.

说的是,按照rspec源码来看,context仅仅是describe方法的别名,意味着这两者没有任何功能性的不同, 然而有一些语境不同(语义不同),理解这个能让你写出更可读的代码

The purpose of “describe” is to wrap a set of tests against one functionality while “context” is to wrap a set of tests against one functionality under the same state. Here’s an example

describe的目的是当它包裹一组,一个功能,的测试代码,的同时

context的目的是包裹一组,在同一状态下,一个功能的,测试代码

例如下面代码

 1 describe "launch the rocket" do
 2   before(:each) do
 3     #prepare a rocket for all of the tests
 4     @rocket = Rocket.new
 5   end
 6
 7   context "all ready" do
 8     before(:each) do
 9       #under the state of ready
10       @rocket.ready = true
11     end
12
13     it "launch the rocket" do
14       @rocket.launch().should be_true
15     end
16   end
17
18   context "not ready" do
19     before(:each) do
20       #under the state of NOT ready
21       @rocket.ready = false
22     end
23
24     it "does not launch the rocket" do
25       @rocket.launch().should be_false
26     end
27   end
28 end

上面的代码可读性好在,没有将所有东西都用describe包裹,因为你读测试代码是在context语境内,对于一个context设置一个对象状态,

@rocket.ready为true时, @rocket.launch() 的行为,导致一个结果,如果只关注一个这个状态时,火箭的启动结果,就不需要再看其他状态的代码

时间: 2024-10-12 13:30:55

Rspec中describe和context不同的相关文章

web中几个context上下文的理解

在 java 中, 常见的 Context 有很多, 像: ServletContext, ActionContext, ServletActionContext, ApplicationContext, PageContext, SessionContext ... 那么, Context 究竟是什么东西呢? 直译是上下文.环境的意思.比如像: "今天我收到了一束花, 男朋友送的!" 又或者 "今天我收到了一束花, 送花的人送错了的!" 同样是收到一束花, 在不同

mysql中describe关键字

今天写代码的时候,有一个类的数据始终不能插入,老是提示在You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'describe, picPath1, picPath2, picPath3, picPath4, picPath5, agentId, belongStore' at li

tomcat7.0中外置的Context配置

在D:\apache-tomcat-7.0.52\conf\Catalina\localhost这个目录下新建一个XML文件,文件名称可以为ROOT.xml,这样访问的URL就是http://localhost:8080/index.jsp就可以访问到你的项目,如果文件名称为myweb(注意此文件名将作为Context中的path,不管文件里的path怎么设置也无效),这样访问的URL就是http://localhost:8080/myweb/index.jsp <?xml version='1

HttpHandler中无法使用Session(context.Session 为Null)

一.问题描述: 最近需要做一个对特定请求(.report)进行响应的接口,当然是使用实现IHttpHandler来进行处理,实现IHttpHandler接口就必须要实现它的两个方法,ProcessRequest(HttpContext context) 和IsRunable() ,看到在ProcessRequest(HttpContext context) 中有个HttpContext的输入参数,以为通过这个就可以对所有的服务器对象进行使用.不过问题出现了,在这个自定义HTTP响应处理类中,对于

深入理解 Android 中的各种 Context

前言 网上关于 Context 的文章也已经有不少了,比如值得参考的有: Android Context完全解析,你所不知道的Context的各种细节 Android Context 到底是什么? 但看了一下,发现还有值得讨论的地方,比如这个等式: Context个数 = Service 个数 + Activity 个数 + 1 老实说,我不明白这个等式有什么意义,而且还是错的.首先多进程情况下,Application 对象就不止一个:其次,Activity.Service.Applicatio

tomcat访问manager报404;server.xml中配置了Context path

<Context path="" docBase="crm" debug="0" reloadable="true" /> 留空,表达的是根: <Context path="/crm" docBase="crm" debug="0" reloadable="true" /> 指定到项目名后,可以通过http://192.16

如何在QML应用中创建一个Context Menu

我们在很多的系统中看见可以在屏幕的一个地方长按,然后就可以根据当前显示的上下文弹出一个菜单.菜单中可以有一些选项,比如删除,修改该项.这种一般在ListView或GridView中常见.今天,我们就在这个例程中详细介绍如何实现这个功能. 对ListView来说,我们只需要对它的delegate做一些修改: Component { id: listDelegate ListItem { id: delegateItem width: listView.width; height: units.gu

cshtml 中的 AppState = Context.Application 和 控制器中的 Application 也相等

AppState = Context.Application @{ ViewBag.Title = "Home Page"; AppState["s1"] = "状态一"; } <div class="jumbotron"> <p>AppState: @AppState["s1"]</p> <p>Context.Application: @Context.Ap

Rails中的测试RSpec升级遇到的问题

1 bundle exec rspec spec/ 2 /home/wuxj/Prac/rrprac/sample_app/spec/spec_helper.rb:20:in `block in <top (required)>': uninitialized constant Capybara (NameError) 3 from /.rvm/gems/ruby-2.1.2/gems/rspec-core-3.0.4/lib/rspec/core.rb:79:in `configure' 4