Cucumber入门之_World

简介: 1. World:   World可以看做是Cucumber在运行每个场景之前所要创建的对象的实例,它不仅使得每一个Step Definition可以调用该实例的方法,而且使得为该项目定义的Ruby类是也可以调用该实例的方法。

1. World

  World可以看做是Cucumber在运行每个场景之前所要创建的对象的实例,它不仅使得每一个Step Definition可以调用该实例的方法,而且使得为该项目定义的Ruby类是也可以调用该实例的方法。World在Cucumber中被定义为方法,接受可变参数mudules,以及一个proc:  

1   def World(*world_modules, &proc)2 
2 RbDsl.build_rb_world_factory(world_modules, proc)
3  end



下面看一个我自己写的小示例:

   目录结构如下:

 

env.rb:该文件通常用于准备环境变量, 这里我加载了三个文件。

1 require 'rubygems'
2 require 'watir-webdriver'
3 require 'rspec'

 

 world.rb

 1 module MyModule
2
3 def self.foo(name)
4 puts "MyModule_FOO: #{name} "
5 end
6
7 def boo(key)
8 puts "MyModule_BOO: #{key}!"
9 end
10
11 end
12
13 World(MyModule)

   在该文件中定义了一个module,在该module中定义了两个方法:一个实例方法boo, 一个类方法foo。最后把定义的这个模块传递给World. 这样以来我们在运行feature的时候,在其它地方(step_definitions或自定义ruby类文件)就可以调用这个module里面的方法了。

 

test.feature 

1 Feature:Test
2 In order to test how to use world
3 as a learner
4 I want to practice to use world
5
6 Scenario: practice to use hooks
7 Given try to use the cucumber keyword

  在这个feature文件中我定义的比较简单,只定义了一个scenario,且该scenario中只有一个步骤Given。因为这个小例子是为了说明World的用法,所以这里不对feature做过多讨论。

 

test.rb

1 Given /^try to use the cucumber keyword$/ do
2 @page = Home.new
3 @page.visit!
4 MyModule.foo("*step_definitions*")
5 end

  在这个step_definitions文件中,是对feature文件中的具体操作实现。因为我们都知道feature文件中只是做了一些描述,具体的执行是放到step_ definitions下面的文件里面的。在这个文件中我new了一个Home文件(看下面Home文件的定义),并且调用了在Home文件中定义的visit!方法。最后一行,我直接调用了在world.rb文件中定义的module的方法foo(因为foo是一个类方法,所以可以直接调用。而boo方法是实例方法,调用前必须实例化一个对象)。

 

Home.rb

1 class Home
2
3 def visit!
4 MyModule.foo("*Home_page_module*")
5 end
6
7 end

  这个文件是我为该项目自己定义的一个ruby类文件,里面定义了一个visit!方法,该方法也调用了world.rb文件中的类方法foo。

  根据文章一开头提到的,World不仅使得Step Definition可以调用该实例的方法,而且使得为该项目定义的Ruby类也可以调用该实例的方法。如此那么程序正常应该会分别输出这两句话。

 

结果:

1 C:\Ruby192\bin\ruby.exe -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) C:\Ruby192\bin/cucumber D:/cucumber/mycucumber/features/test.feature --format Teamcity::Cucumber::Formatter --expand --color -r features
2 Testing started at 上午10:37 ...
3 MyModule_FOO: *Home_page_module*
4 MyModule_FOO: *step_definitions*
5 1 scenario (1 passed)
6 1 step (1 passed)
7 0m0.000s

  结果中3,4行和我们预期的一致。
  

 

 

目录
相关文章
|
4月前
|
算法 编译器 C语言
C++语言的“Hello World”
C++语言的“Hello World”
32 0
|
3月前
编写Groovy Hello World 程序
编写Groovy Hello World 程序
|
3月前
|
存储 传感器 算法
Hello World CGAL 5.4入门
Hello World CGAL 5.4入门
|
3月前
|
机器学习/深度学习 存储 算法
刷题——Python篇(0)Hello World
刷题——Python篇(0)Hello World
|
4月前
|
Unix Java C语言
C 语言入门:如何编写 Hello World
C 语言是由 Dennis Ritchie 于 1972 年在贝尔实验室创建的一种通用编程语言。尽管年代久远,它仍然是一款非常流行的语言。它之所以受欢迎的主要原因是它是计算机科学领域的基础语言之一。C 语言与 UNIX 紧密相连,因为它被用于编写 UNIX 操作系统。
153 0
|
Web App开发 移动开发 网络协议
用 Python 撸一个 Web 服务器-第2章:Hello World
用 Python 撸一个 Web 服务器-第2章:Hello World
|
编译器 Go C语言
Go入门:Hello World
Go入门:Hello World
72 0
Go入门:Hello World
|
SQL IDE JavaScript
你会几种语言编写 Hello World ?
Hello, World最早是由 Brian Kernighan 创建的。1978年,Brian Kernighan写了一本名叫《C程序设计语言》的编程书,在程序员中广为流传。他在这本书中第一次引用的Hello World程序,源自他在1973年编写的一部讲授 B语言的编程教程
|
Python 开发工具 C++
Python学习笔记 (1)Hello World(环境搭建+输出Hello World!)
随想   高考发挥失常、科三遇火车发挥失常,各种不顺……突然发现假期都快没了,才想起高考前想象的这个假期要做的一堆事,现在来多完成一件吧。   这几篇博客仅只是我的学习笔记,凑合看吧。我这个python小白看来菜鸟教程写的是真的好。
1164 0