尝试为我的功能

时间:2016-08-23 01:55:41

标签: ruby-on-rails rspec capybara

我在这里进行了功能测试:

/spec/features/admin/user_controller_spec.rb

require 'rails_helper'

feature "user admin page" do
  scenerio "abc..." do
    user = create(:user)
    login_with(user.email)
    ..
    ..
  end
end

我有这个:

/spec/features/support/feature.rb

RSpec.configure do |config|
    config.include Features::SessionHelpers, type: feature
end

/spec/features/support/features/session_helpers.rb

module Features
    module SessionHelpers
        def login_with(email, password = "Password123")
            visit session_login_path
            fill_in "login_form[email]", with: email
            fill_in "login_form[password]", with: password
            click_button "Sign In"
        end
    end
end

当我在某项功能上运行rspec时,我收到此错误:

NoMethodError:
  undefined method `login_with' for #<RSpec::Examp...

我有一个rails_helper和一个spec_helper.rb文件。

1 个答案:

答案 0 :(得分:1)

当您包含帮助程序时,您可以使用type选项传入一个哈希,指定帮助程序应用于哪种类型的示例组。

type的值应为:controller:model:feature:view之一。在您的代码中,您传递变量feature。它应该是一个符号。

config.include Features::SessionHelpers, type: :feature

如果您尝试运行规范,则会收到相同的错误,因为您不允许Rspec知道您已在其中一个文件中添加了其他配置。为此,请在rails_helper.rb

中添加以下行
require_relative './features/support/feature'

请注意,您也可以直接在rails_helper

中的预烘焙配置中添加配置

这将让rspec运行feature.rb中定义的配置,但您再次收到错误消息NameError: uninitialized constant Features。如果您想一点,在feature.rb中,您尝试包含Features::SessionHelpers,但feature.rb无法猜测模块的位置。您必须告诉它要求该模块具有以下声明

require_relative&#39; ./ features / session_helpers&#39;

现在,如果您尝试运行规范,希望您的测试将通过:)