- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我开始使用 Rspec,但是当我运行 bundle exec rspec
时出现错误
/spec/requests/pages_spec.rb:20:in `block (2 levels) in <top (required)>': undefined local
variable or method `root_path' for #<Class:0x00000102e46850> (NameError)
我没有运行 Spork 或 Guard,所以下面的问题不适用
undefined local variable or method `root_path' (Rspec Spork Guard)
我在我的 spec_helper.rb
文件中添加了 config.include Rails.application.routes.url_helpers
,但这没有帮助。 undefined local variable or method `root_path' Hartl's Tutorial Chapter 5.3.2
这是pages_spec.rb
require 'spec_helper'
describe "Pages" do
describe "navigation" do
def self.it_should_be_on(path_name, value=nil)
before { visit path_name }
it "should be on #{path_name}" do
page.should have_link('Home')
page.should have_link('Inventory')
page.should have_link('FAQ')
page.should have_link('About Us')
page.should have_link('Location')
page.should have_link('Contact Us')
# page.should have_link('Login')
end
end
it_should_be_on root_path
it_should_be_on faq_path
it_should_be_on about_path
it_should_be_on location_path
it_should_be_on contact_path
# it_should_be_on login_path
end
end
spec_helper.rb
# This file is copied to spec/ when you run 'rails generate rspec:install'
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
# Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories.
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
# Checks for pending migrations before tests are run.
# If you are not using ActiveRecord, you can remove this line.
ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration)
RSpec.configure do |config|
# ## Mock Framework
#
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
#
# config.mock_with :mocha
# config.mock_with :flexmock
# config.mock_with :rr
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
config.fixture_path = "#{::Rails.root}/spec/fixtures"
# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false
# instead of true.
config.use_transactional_fixtures = true
# If true, the base class of anonymous controllers will be inferred
# automatically. This will be the default behavior in future versions of
# rspec-rails.
config.infer_base_class_for_anonymous_controllers = false
# Run specs in random order to surface order dependencies. If you find an
# order dependency and want to debug it, you can fix the order by providing
# the seed, which is printed after each run.
# --seed 1234
config.order = "random"
config.include Capybara::DSL
config.include Rails.application.routes.url_helpers
end
更新在阅读了 shared_examples 之后,我成功地尝试了这个。有没有更好的方法来编写这个测试?我最终将页面分成单独的页面,如主页等。
require 'spec_helper'
describe "Pages" do
subject { page }
shared_examples "navigation" do |path_name|
before { visit send( path_name) }
describe "navigation links should be on #{path_name}" do
it { should have_link('Home') }
it { should have_link('Inventory') }
it { should have_link('FAQ') }
it { should have_link('About Us') }
it { should have_link('Location') }
it { should have_link('Contact Us') }
# it { should have_link('Login') }
end
end
describe "Home Page" do
include_examples "navigation", :root_path
end
end
最佳答案
在 RSpec 的 describe
block 的顶层,没有任何 Rails 助手可用。它们仅在较低级别的 block 中可用(例如 let
、before
、it
等)。
如果您想跨示例共享此类代码,您可以使用 shared_context 或 shared_example,如 RSpec 文档中所述,或者在 describe
级别切换为使用符号作为参数并推迟将它们解释为方法,直到您处于较低级别的 block 中,如 the answer from @IharDrozdov 所示.
关于ruby-on-rails - Rspec 未定义的局部变量或方法 root_path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21210900/
我不敢相信这会这么难。我在网上评分试图找到解决方案,但仍然无法访问我的 Flask 应用程序的 root_path。更糟糕的是,它在一个文件中有效,而在另一个文件中却无效。这是我尝试过的: from
我的 rspec 文件中有以下代码块,位于/spec 文件夹的根目录中。 require 'spec_helper' describe "home" do subject { page } bef
我开始使用 Rspec,但是当我运行 bundle exec rspec 时出现错误 /spec/requests/pages_spec.rb:20:in `block (2 levels) in
I18n-Flash-Messages-with-Devise-and-Bootstrap 路线.rb root :to => 'users#index' devise_for :users, :
我的 Rails 应用程序中有一个未受用户保护的 root_path,即它是一个简单的门户主页,带有一个登录表单。 用户登录后,我希望它转到dashboard_path。 我这样做过: def sig
我有一个新手问题:-) 我正在“创建”一个应用程序,我使用 M. Hartl 的教程来做这件事。但是自从我决定更改routes.rb 以来,我遇到了一些问题。 我知道问题已经发布了,但答案对我不起作用
在 Rails 中,有很多助手可以指导我们的操作,例如 collections_path new_member_path edit_member_path等等。 但根在哪里?有 helper 总是指向
我尝试遵循一个教程,该教程旨在演示如何更改静态和模板文件夹在根目录中的位置。但是我无法让这个例子工作。应用程序运行正常,但在查找样式表“GET/static/style.css HTTP/1.1”40
我有一个设置自定义 root_path 的 Flask 应用。 app = Flask( __name__, root_path='flask_news' ) @app.route('
我有这样定义的语言环境: # routes.rb scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/ do ...
如何在我的 application.js 文件中获取项目的 root_path? 我需要它用于需要加载其他 JS 文件的 js 插件 (codemirror)。如果我说“/javascripts/ne
它带有 capybara 功能测试。我的 Controller 中没有为根页面设置 before_action 过滤器,所以我完全被这个难住了。还有其他人遇到同样的问题吗? 导致错误的行很简单 vis
我正在使用 Rails 3.2.2 和 Devise 2.0.4 设计文档说注册后,它将重定向到 root_path 我已经设置了 root_path: root :to => 'dreams#ind
我需要有关设计身份验证 gem 的路由问题帮助,以便在成功登录后重定向到自定义页面,以便通过输入测试人员姓名和年龄(测试数据)来创建新记录 我正在使用 Rails 3 和设计版本 1.4.9 我的路线
我正在完成本教程 -> http://ruby.railstutorial.org/chapters/filling-in-the-layout 您可以在这里遇到问题 -> intense-dusk-
我使用 rack-ssl-enforcer gem,以及特定路径的当前配置: config.middleware.use Rack::SslEnforcer, :only => [%r{^/users
当我刷新 Rails 应用程序或在浏览器中的 localhost:3000 上按 Enter 键时,我的应用程序会加载'/' 正确并显示到控制台 Started GET "/assets/*" 对于我
所以我关于 Stackoverflow 的第一个问题..... =] 我在 Michael Hartl's RoR Tutorial 的第 5.3.2 章中的测试都失败了,当教程说它应该通过时(教程说
我正在尝试编写一个功能测试来检查进入特定路径是否会将用户重定向到外部网站。 为了在我的测试中禁止外部连接,我在我的 spec_helper.rb 中有以下内容: require 'webmock/rs
我正在尝试编写一个功能测试来检查进入特定路径是否会将用户重定向到外部网站。 为了在我的测试中禁止外部连接,我在我的 spec_helper.rb 中有以下内容: require 'webmock/rs
我是一名优秀的程序员,十分优秀!