【问题标题】:MethodError: undefined method `sign_in' for RSpecMethodError:RSpec 的未定义方法“sign_in”
【发布时间】:2015-01-26 17:00:46
【问题描述】:

在 Michael Hartl 的 Ruby on Rails 教程的第 9 章中,我遇到了 RSpec 测试的问题,因为他们看不到文件 utility.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

【问题讨论】:

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


    【解决方案1】:

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

    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 中

    【讨论】:

    • 谢谢!它起作用了,所以,我把它放回文件 support/utilities.rb 并在 rails_helper.rb 中添加了到这个文件的路由: require 'support/utilities' 现在所有测试都是绿色的! =)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多