如何为rspec包含/设置可见的帮助方法?

时间:2012-08-10 18:18:32

标签: ruby-on-rails methods rspec visibility helper

我在控制器 PlanetsController 中使用名为“ generate_coordinate ”的方法(位于app / helpers / planets_helper.rb中)。

运行测试时,似乎rspec无法访问它,因此导致我的测试套件失败,因为行星没有任何坐标。

我尝试在 utilities.rb 文件的开头包含我的助手,但它无法正常工作

include ApplicationHelper
include PlanetsHelper

我还尝试在utilities.rb文件中编写我的方法,但没有取得更多成功。

我读过这篇文章“Where/how to include helper methods for capybara integration tests”,但它没有帮助我。

我还读到了“存根”功能,但由于我无法理解它可以用于什么,它对我帮助不大......

有什么想法吗?


这是我的测试代码(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

当点击“验证”时,它会指向 PlanetsController ,它会调用“generate_coordinate”方法

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

1 个答案:

答案 0 :(得分:0)

如果您的控制器和帮助程序都使用了generate_coordinate方法,请考虑移入控制器(作为私有方法)并添加此单行程序以允许视图和帮助程序访问它:

# planets_controller.rb
helper_method :generate_coordinate

helper_method将控制器方法暴露给控制器范围内的视图和帮助器(在这种情况下,行星#index,行星#show等)。

如果你宁愿这样做,你有两个选择:

  • 在控制器顶部插入include PlanetsHelperclass PlanetsController
  • 如果要调用辅助方法,请按以下方式调用:view_context.generate_coordinate(...)

尝试一下,看看哪一个最符合您的需求。