将模块中的类添加到Cucumber World

时间:2014-08-12 12:34:41

标签: ruby testing cucumber automated-tests

鉴于我在功能/支持目录中定义了以下模块

apiworld.rb

module Api
   class User
       ...
   end
   ...
end

以及

webworld.rb

module Web
   class User
       ...
   end
   ...
end

在我的env.rb文件中

env.rb

require File.expand_path(File.dirname(__FILE__)+'/webworld')
require File.expand_path(File.dirname(__FILE__)+'/apiworld')

if ENV['USE_API'] == 1
    World(Api)
else
    World(Web)
end

因此,如果我尝试在步骤定义中使用此构造,如

Given /^a user is created$/ do
   @user = User.new
end

运行cucumber,我的ruby解释器会给我这个输出

  

未初始化的常量User(NameError)        ./features/step_definitions/user_steps.rb:17: [...]

如何使这项工作?有没有办法,或者我认为我是错误的方向。我对红宝石很新 - 所以我真的不知道它能做什么以及它不能做什么。

1 个答案:

答案 0 :(得分:2)

您不能使用World来实现此目的。 World用于在每个步骤def中将方法混合到self对象中。

而不是:

if ENV['USE_API'] == 1
  World(Api)
else
  World(Web)
end

试试这个:

User = ENV['USE_API'] == 1 ? Api::User : Web::User