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_。