2

コントローラーPlanetsControllerで " generate_coordinate " (app/helpers/planets_helper.rb にあります)という名前のメソッドを使用します。

テストを実行すると、rspec がアクセスできないようで、惑星に座標がないためにテスト スイートが失敗します。

utility.rbファイルの先頭にヘルパーを含めようとしましたが、うまくいきませんでした

include ApplicationHelper
include PlanetsHelper

また、utilities.rb ファイル内にメソッドを記述しようとしましたが、成功しませんでした。

この投稿「カピバラ統合テストのヘルパーメソッドをどこに/どのように含めるか」を読みましたが、役に立ちませんでした。

「スタブ」関数についても読みましたが、それが何に使用できるのか理解できないため、あまり役に立ちませんでした...

何か案が ?


これが私のテストコードです(spec/requests/planet_pages_spec.rb)

describe "Create planet" do
    before do
        visit new_planet_path
        fill_in "Name", with: "MyPlanet"
        click_button "Validate"
    end

    it {should have_selector('h1', text: "Planet")}
end

「検証」をクリックすると、「generate_coordinate」メソッドを呼び出すPlanetsControllerにつながります

def create
    @planet = Planet.new(name: params[:planet][:name],
        coordinates: generate_coordinates, [...])

        if @planet.save
            redirect_to action: 'index'
        else
            render 'new'
        end

そして、ここに generate_coordinate メソッドがありますが、これは rspec によって呼び出されたことはないようです (ブラウザでナビゲートするときです)。

module PlanetsHelper

    def generate_coordinates
        coordinates = "0.0.0.0"
    end

終わり

4

1 に答える 1

0

メソッドがコントローラーとヘルパーの両方で使用されている場合generate_coordinateは、コントローラーに (プライベート メソッドとして) 移動し、このワンライナーを追加して、ビューとヘルパーがアクセスできるようにすることを検討してください。

# planets_controller.rb
helper_method :generate_coordinate

helper_methodコントローラー メソッドをコントローラーのスコープ内のビューとヘルパーに公開します (この場合、planets#index、planets#show など)。

逆にやりたい場合は、次の 2 つのオプションがあります。

  • include PlanetsHelperコントローラーの上部 ( の下class PlanetsController)に挿入します。
  • ヘルパー メソッドを呼び出す場合は、次のように呼び出します。view_context.generate_coordinate(...)

それらを試してみて、どれがあなたのニーズに最も適しているかを見てください.

于 2012-08-10T23:58:34.060 に答える