MethodError: undefined method `sign_in' for RSpec
MethodError: undefined method `sign_in' for RSpec
在 Michael Hartl Rails 教程 Ruby 的第 9 章中,我遇到了 RSpec 测试的问题,因为他们看不到我的 sign_in文件 utilities.rb 中定义的方法。我被卡住了,我检查了一切,看起来是正确的。我看到类似的帖子,其中 include 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
中
在 Michael Hartl Rails 教程 Ruby 的第 9 章中,我遇到了 RSpec 测试的问题,因为他们看不到我的 sign_in文件 utilities.rb 中定义的方法。我被卡住了,我检查了一切,看起来是正确的。我看到类似的帖子,其中 include 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
中