2016-04-05 10 views
2

私はRuby 2.3.0を使用してカラバッシュテストを作成しており、モジュールからキュウリメソッドを呼び出すのに問題があります。モジュールからキュウリメソッドを呼び出す

module A 
    module_function 
    def visible 
     wait_for_elements_exist("Some element query") 
    end 
end 

そして:

Class B 
    include A 
end 

私はB.visibleを呼び出すか、Bでこれを定義します。

def visible 
    A::visible 
end 

を、モジュールAにwait_for_elements_existを示すB.visible、私が手NoMethodErrorを呼び出す

私は012にしようとしたモジュール内のとモジュール内のinclude Calabash::Cucumberそれはうまくいかなかった。

私のプロジェクトでは他のクラスのすべてのキュウリのメソッドにアクセスできます。私はenv.rbにキュウリが必要なので、ライブラリがロードされます。モジュールからライブラリ関数にアクセスする方法や、モジュールに適切に物を含める方法を知りたい。

EDIT

私は動作しませんでしたinclude Calabash::Cucumber::WaitHelpers

そしてinclude Calabash::Cucumber::Operations

を試してみました。私はインクルードをextendに置き換えましたが、今はメソッドにアクセスできますが、それは私の問題を解決しません。私は必要なもの

は、私はプラットフォーム間で異なるメソッドを定義し、これらのモジュールで

AndroidModule < Calabash::Android::Operations

IosModule < Calabash::Cucumber::Operations

です。

は、その後、私はスクリーンのための特定の方法を定義する各種画面についてScreenModuleあります、そしてIは起動テストに基づいて、私は、プラットフォームのモジュールのいずれかを含むようにScreenModuleを必要とします。

::OperationsにはScreenModuleからアクセスする必要がありますが、それらの方法は見つかりません。

私は::Operations moudle

答えて

1

短い答えは、あなたのモジュール内の右側のモジュールを含めていないことも含まれてきた場合でも、wait_for_elements_existを使用することはできませんなぜ私は、把握することはできません。

include Calabash::Cucumber::WaitHelpers 

答えが長くなるほど、何をしようとしているかによって異なります。

# features/steps/my_steps.rb 
module MyApp 
    module A 
    def visible(mark) 
     wait_for_element_exist("* marked:'mark'") 
    end 
    end 
end 

World(MyApp::A) # Add your module to the Cucumber World. 

Then(/^I touch next$/) do 
    visible("Next") 
    touch("* marked:'Next'") 
end 

あなたはCalSmoke projectにこの例を見ることができます:それはあなたがルビーが初めてのようですので、私はこの方法をお勧めします。

モジュールをCucumberに読み込む方法です。

あなたのコメントに基づいて、私はページオブジェクトモデル(POM)を使用したいと思っています。

x-platform-example repoおよびXamarin docsでこれを行う方法の例があります。

ルビがコードをロードする方法と、キュウリにメソッドを公開する方法には違いがあることを理解する必要があります。

ルビーを初めてお使いの方は、この本Metaprogramming in Rubyをお勧めします。キュウリを初めてお使いになる方は、このリソースをお勧めします。私はここで作成しようとしています何

+0

、私はAndroidとiOSのために使用することができ、ページオブジェクトのメソッドのためのモジュールであり、 2つのプラットフォーム間でステップ定義を共有できます。 例えば、私からのステップは次のようになります。そして、 '(/ ^私は/ログイン画面$を参照) login_screen.visible login_screen.do_stuff' そして私...ログインページオブジェクトを作成... を行います'visible'や' do_stuff'のようなメソッド用のモジュールを作成したいので、iOSとAndroidページクラスにモジュールを含めることができます。 モジュールAで 'Calabash :: Cucumber :: Operations'を拡張して操作にアクセスすることで、これを実現しました。 – Krumons

関連する問題