混合Faker方法 - RSpec

时间:2013-08-02 22:54:20

标签: ruby-on-rails rspec faker

如何在一个命名空间下访问每个Faker方法:

any.sentence
any.name
... other methods from Faker::xxx classes

而不是写作:

Faker::Lorem.sentence
Faker::Name.name
...

我正在使用RSpec和Rails。

1 个答案:

答案 0 :(得分:1)

为了做到这一点,您可以定义变量any,它等于您要调用的命名空间类:

lorem = Faker::Lorem
lorem.sentence
#=> "Dignissimos eos qui doloribus quaerat sequi est corrupti error."

name = Faker::Name
name.name
#=> "Dr. Percival Ernser"

但是,请将此视为黑客而不是您应该在代码中执行的操作。实际上,当有人会读你的代码(或者你在几个月内),看到Faker::Namespace就会显而易见。另一方面,阅读name.name将导致混淆,因为你必须寻找它的定义来理解它的作用。命名空间有一个存在的理由,不应该被覆盖以省去一些按键。 希望这能回答你的问题!

编辑:你评论“将所有命名空间统一为一个”。这是不可能的(至少Faker)。实际上,不同的方法具有相同的名称,但在不同的名称空间中。例如,FakernameFaker::Name中都有方法Faker::Company的实现(产生不同的结果)。

因此,统一命名空间是不可能的,因为它会导致失去一些方法。