ruby-on-rails - 方法错误: undefined method `sign_in' for RSpec

标签 ruby-on-rails ruby rspec railstutorial.org

在 Michael Hartl 的 Ruby on Rails 教程的第 9 章中,我遇到了 RSpec 测试的问题,因为它们没有看到文件utilities.rb 中定义的我的sign_in 方法。我被困住了,我已经检查了所有内容,看起来是正确的。我看到类似的帖子,其中包含 ApplicationHelper 行对某人有帮助,但我已经有了它,而且我对同一个文件中的“full_title”方法没有任何问题。

utilities.rb:

def full_title(page_title)
  base_title = "Ruby on Rails Tutorial Sample App"
  if page_title.empty?
    base_title
  else
    "#{base_title} | #{page_title}"
  end
end

def sign_in(user, options={})
  if options[:no_capybara]
    #Sign in when not using Capybara
    remember_token = User.new_remember_token
    cookies[:remember_token] = remember_token
    user.update_attribute(:remember_token, User.encrypt(remember_token))
    else
      visit signin_path
      fill_in "Email",    with: user.email
      fill_in "Password", with: user.password
      click_button "Sign in"
  end
end

以及失败的文件 user_pages_spec.rb:

require 'rails_helper'
include ApplicationHelper
...
...
...
describe "edit" do
let(:user) { FactoryGirl.create(:user) }
before do 
  sign_in user
  visit edit_user_path(user)
end

describe "page" do
  it { should have_content("Update your profile") }
  it { should have_title("Edit user") }
  it { should have_link('change', href: 'http://gravatar.com/emails') }
end
...
end

最佳答案

如果您很难包含该方法,您可以尝试将其直接包含在您的规范中。

require 'rails_helper'
...
describe "page" do
  it { should have_content("Update your profile") }
  it { should have_title("Edit user") }
  it { should have_link('change', href: 'http://gravatar.com/emails') }
end 
....


private

def sign_in(user, options={})
  if options[:no_capybara]
    #Sign in when not using Capybara
    remember_token = User.new_remember_token
    cookies[:remember_token] = remember_token
    user.update_attribute(:remember_token, User.encrypt(remember_token))
    else
      visit signin_path
      fill_in "Email",    with: user.email
      fill_in "Password", with: user.password
      click_button "Sign in"
  end

如果有效,请继续为您的规范创建一个带有辅助方法的新模块,然后将其包含在您的spec_helper/rails_helper中

关于ruby-on-rails - 方法错误: undefined method `sign_in' for RSpec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28154963/

相关文章:

ruby-on-rails - 从 Ruby on Rails 中的 collection.map 中排除选项?

ruby - 在 rspec 中定义 `after` 别名的正确方法是什么?

ruby - 如何规范退出或中止的方法

ruby-on-rails - 类 `_run_suites' 的未定义方法 `Minitest::Unit' (NameError)

javascript - Rails - 使用 Javascript/HTML 上传文件

ruby-on-rails - 双渲染错误轨

ruby - 在当前文件夹上使用Ruby REPL的Docker

ruby - 'unexpectedAlertBehaviour' 可以在 ChromeDriver 和 Firefox 以及 IEDriverServer 中设置吗

ruby-on-rails - Rails : When testing controllers with RSpec, 如何阻止它们重定向?

php - 购物车价格变动