Stroy框架是一个在应用程序级别对测试进行描述的框架。Rspec的BDD测试中其实缺少了一个像Rails传统测试中的集成测试(integration tests)那样的东西,Rspec::Strop就是为了补上这个部分而产生的。
Stroy格式:
Title (故事标题)
故事的描述:
作为一个怎样的角色
我想要什么样
最后得到怎样的结果
验证故事的标准: (以场景(Scenario)的形式提出)
Scenario: 场景标题
Given [场景内容]
And [场景附加内容]…
When [发生事件]
Then [产生的后果]
And [其它后果]…
Scenario: …
以上就是故事编写的基本结构,Given后可以加多个And,Then也是。故事直接保存为文本文件就可以了。然后开始编写故事的验证机制(其实就是针对上面描述的场景以代码来表示)。
故事验证格式:
steps_for(:故事名) do
Given("场景内容") do |占位符|
代码描述
end
When("发生事件") do |占位符|
代码描述
end
Then("产生的后果") do |占位符|
代码描述
end
end
解释下,Given块的个数应该与故事清单中的Given语句加后面的And的个数相当,Then块也是。
例子: 故事login
Story: 以存在的用户身份登录
作为一个未认证的用户
我想要登录到网站
那么我能看见我的账户信息
Scenario: 正常登录
Given 我的账户为test@example.org
When 我用邮箱为test@example.org和密码是foofoo进行登录
Then 我能够登录
And 我会看到账户页面
故事验证login.rb:
require 'rubygems'
require 'spec/story'
steps_for(:login) do
Given "我的账户为$email" do |email|
@user = find_or_create_user_by_email({:email => email,
:password => 'foofoo',
:password_confirmation => 'foofoo'})
end
When "我用邮箱为$email和密码是$password进行登录" do |email, password|
post '/login', :user => \{:email => email, :password => password\}
end
Then("我能够登录") do
end
Then("我会看到账户页面") do
end
end
with_steps_for(:login) do
run "login"
end
参考: * http://rspec.info/ * http://blog.davidchelimsky.net/articles/2007/10/22/plain-text-stories-on-rails * http://dannorth.net/whats-in-a-story * http://www.letrails.cn/archives/rspec-story-tutorials