0

1 つの名前空間だけで各 Faker メソッドにアクセスするにはどうすればよいですか。

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

書く代わりに:

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

RSpec と Rails を使用しています。

4

1 に答える 1

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ことは混乱につながります。それが何をするのかを理解するには、その定義を探す必要があるからです。名前空間には存在する理由があり、いくつかのキーストロークを節約するために上書きすべきではありません。これがあなたの質問に答えてくれることを願っています!

編集:「すべての名前空間を1つに統合する」というコメントから。これは不可能です (少なくとも の場合Faker)。実際、異なるメソッドは同じ名前ですが、名前空間は異なります。たとえば、との両方にFakerメソッドの実装があります (異なる結果が得られます)。nameFaker::NameFaker::Company

結果として、一部のメソッドが失われるため、名前空間を統一することはできません。

于 2013-08-03T11:21:11.817 に答える