2

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

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

我试图在utility.rb文件的开头包含我的助手,但它没有用

include ApplicationHelper
include PlanetsHelper

我还尝试在 utility.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

当点击“Validate”时,它会导致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

结尾

4

1 回答 1

0

如果你的generate_coordinate方法被你的控制器和助手使用,考虑进入你的控制器(作为一个私有方法)并添加这个单行以允许视图和助手访问它:

# planets_controller.rb
helper_method :generate_coordinate

helper_method将控制器方法暴露给控制器范围内的视图和助手(在本例中为 planets#index、planets#show 等)。

如果你想反过来做,你有两个选择:

  • 插入include PlanetsHelper控制器顶部(下class PlanetsController
  • 当你想调用辅助方法时,像这样调用它:view_context.generate_coordinate(...)

试一试,看看哪一个最适合您的需求。

于 2012-08-10T23:58:34.060 回答