Alias Capybara页面方法

时间:2014-02-07 08:58:54

标签: ruby-on-rails rspec ruby-on-rails-4 capybara

我是rails的新手,所以我可能完全错过了这个问题,但是当我使用引用我自己的Page类的测试时,我似乎在Capybara中遇到了问题。

当我有一个创建了Page类实例的测试时(通过FactoryGirl),我无法运行任何Capybara页面方法(例如visit,fill_in,click等)。我收到以下错误:

NoMethodError:
   undefined method `visit' for #<Page:0x007fdf5eb9d990>

当我添加调试器语句并检查page变量时,它是我的Page类的一个实例。当我想执行Capybara方法时,如何确保我总是使用Capybara页面?

我的功能规范(我知道这是不完整的,但错误发生在before循环中):

require 'spec_helper'

feature 'Modifying a page' do
  let(:account) { FactoryGirl.create(:account) }
  let!(:page_creator) { FactoryGirl.create(:user, :account => account) }
  let!(:standard_user) { FactoryGirl.create(:user, :account => account) }
  let!(:site) { FactoryGirl.create(:site, :account => account) }
  let!(:page) { FactoryGirl.create(:page, :account => account, :site => site, :creator => page_creator) }

  context 'as the creator of the page' do
    before(:each) { sign_in_via_form account, page_creator, page_creator.password }

    scenario 'with valid information' do
      new_page_name = Faker::Lorem.characters(Random.rand(10..100))
      new_page_url = Faker::Internet.url
      new_page_description = Faker::Lorem.characters(Random.rand(50..250))

      click_link site.name
      click_link 'Pages'
      find("a[href='#{edit_site_page_path([site, page])}'").click
    end
  end
end

sign_in_via_form方法在以下文件中定义:

module AuthenticationHelpers
  include Warden::Test::Helpers
  Warden.test_mode!

  def sign_in_via_form(account, user, password)
    visit "http://#{account.subdomain}.example.com"
    fill_in 'Email', :with => user.email
    fill_in 'Password', :with => password
    click_button 'Sign In'
  end
end

我有许多其他功能可以对付正在运行的不同模型(并且使用上面的sign_in_via_form方法没有任何问题,这使我认为它与Page类有关。

正如我所说的,我对rails非常陌生,所以如果这些测试看起来有点难看,你就不得不原谅我: - )

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

好的,所以这很简单,我错过了真正的问题。

我使用名为let的{​​{1}}方法创建变量,这显然会覆盖Capybara页面变量。我将其更改为以下内容,它按预期运行(请注意变量page):

the_page