Ruby on rails 使用rspec和宏时未定义的方法
这是我的要求规格:Ruby on rails 使用rspec和宏时未定义的方法,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,这是我的要求规格: require 'spec_helper' describe "Password pages" do describe "user views his passwords" do let(:user) { create(:user) } sign_in(:user) end end spec\u helper.rb RSpec.configure do |config| config.include FactoryGirl::Syntax:
require 'spec_helper'
describe "Password pages" do
describe "user views his passwords" do
let(:user) { create(:user) }
sign_in(:user)
end
end
spec\u helper.rb
RSpec.configure do |config|
config.include FactoryGirl::Syntax::Methods
config.infer_base_class_for_anonymous_controllers = false
config.order = "random"
config.include Capybara::DSL
config.include LoginMacros
end
module LoginMacros
def sign_in(user)
visit new_user_session_path
fill_in 'Email', with: user.email
fill_in 'Password', with: user.password
click_button 'Sign in'
end
end
支持/登录\u macros.rb
RSpec.configure do |config|
config.include FactoryGirl::Syntax::Methods
config.infer_base_class_for_anonymous_controllers = false
config.order = "random"
config.include Capybara::DSL
config.include LoginMacros
end
module LoginMacros
def sign_in(user)
visit new_user_session_path
fill_in 'Email', with: user.email
fill_in 'Password', with: user.password
click_button 'Sign in'
end
end
运行spec时,我收到错误:
/spec/requests/account_pages_spec.rb:9:in `block (2 levels) in <top (required)>': undefined method `sign_in' for #<Class:0x007fd4f97183f8> (NoMethodError)
/spec/requests/account\u pages\u spec.rb:9:in'block(2层)in':未定义的方法'sign\u in'(NoMethodError)
我使用这种很酷的技术,但另一种方式是:
创建页面类:
class PageObject
include Capybara::DSL
def visit_page(page)
visit(page)
self
end
def login(user)
fill_in 'Email', with: user.email
fill_in 'Password', with: user.password
click_button 'Sign in'
end
end
创建功能
而不是描述
:
require 'spec_helper'
feature 'test authozire page' do
let(:login_page) { PageObject.new }
let(:user) { create(:user) }
scenario 'login page have field' do
page = login_page.visit_page(new_user_session_path)
expect(page.have_field?('email')).to be_true
expect(page.have_field?('password')).to be_true
end
scenario "user can login" do
login_page.visit_page(new_user_session_path).login(user)
# more awesome test
end
end
谢谢,我试过了,但我还是犯了同样的错误。试着在一个before块的call中加上sign_。