【问题标题】:Padrino, mounting app for CapybaraPadrino,Capybara 的安装应用程序
【发布时间】:2016-01-27 05:11:07
【问题描述】:

我有一个功能规格: /spec/features/posts_features_spec.rb:

require 'spec_helper'

describe "Displaying Posts" do
  it "can see posts on posts page" do
    Post.create(title: "Title", content: "Content")
    visit '/posts'
    expect(page).to have_content("Title")
    expect(page).to have_content("Content")
  end
end

当我运行测试时,我得到:

WARNING! No apps are mounted. Please, mount apps in `config/apps.rb`

还有一个失败的测试:

NameError:
       uninitialized constant Post

/spec/spec_helper.rb:

require 'rack/test'
require 'rspec/padrino'
require 'capybara/rspec'

Capybara.app = Padrino.application

RSpec.configure do |config|
  config.include Rack::Test::Methods
  config.include RSpec::Padrino
  config.include Capybara::DSL

  config.expect_with :rspec do |expectations|
    expectations.include_chain_clauses_in_custom_matcher_descriptions = true
  end

  config.mock_with :rspec do |mocks|
    mocks.verify_partial_doubles = true
  end
end

/宝石文件:

source 'https://rubygems.org'

# Padrino supports Ruby version 1.9 and later
ruby '2.3.0'

# Project requirements
gem 'rake'

# Component requirements
gem 'bcrypt'
gem 'sass'
gem 'haml'
gem 'activerecord', '>= 3.1', :require => 'active_record'
gem 'sqlite3'

# Test requirements
group :test do
  gem 'shoulda'
  gem 'rack-test', :require => 'rack/test'
  gem 'rspec-padrino'
  gem 'capybara'
end

# Padrino Stable Gem
gem 'padrino', '0.13.1'

/app/app.rb:

module PadrinoBlog
  class App < Padrino::Application
    register SassInitializer
    use ConnectionPoolManagement
    register Padrino::Mailer
    register Padrino::Helpers

    enable :sessions

    get "/" do
      "Hello World!"
    end

    get :about, :map => '/about_us' do
      render :haml, "%p This is a sample blog created to demonstrate how Padrino works!"
    end
  end
end

/config/apps.rb:

Padrino.configure_apps do
  # enable :sessions
  set :session_secret, '67c26da8db30eaf68907e2de05783d33be5e246b87c194f0579bdb589c0761dd'
  set :protection, :except => :path_traversal
  set :protect_from_csrf, true
end

# Mounts the core application for this project

Padrino.mount("PadrinoBlog::Admin", :app_file => Padrino.root('admin/app.rb')).to("/admin")
Padrino.mount('PadrinoBlog::App', :app_file => Padrino.root('app/app.rb')).to('/')

我尝试了各种不同的方法,例如在 spec_helper 中需要 'app.rb' 文件,这导致那里也必须需要 active_record,这会导致一个问题,因为它不知道 SassInitializer 是什么, 等等。

老实说,我真的不知道我在做什么,也不知道这一切是如何结合在一起的,所以非常感谢任何帮助。

repo 的分支here.

【问题讨论】:

    标签: rspec capybara padrino


    【解决方案1】:

    我从未使用过 padrino,但您似乎在您的 spec_helper 顶部缺少几行实际上会加载应用程序资源的行

    RACK_ENV = 'test' unless defined?(RACK_ENV)
    require File.expand_path(File.dirname(__FILE__) + "/../config/boot")
    Dir[File.expand_path(File.dirname(__FILE__) + "/../app/helpers/**/*.rb")].each(&method(:require))
    

    【讨论】:

    • 我已经复制/粘贴了这些内容。它已将错误消息移至 - 现在是“失败/错误:Post.create(标题:“标题”,内容:“内容”)' ActiveRecord::StatementInvalid: 找不到表'posts'
    • 听起来你需要在测试环境中设置/迁移你的数据库
    • "padrino rake ar:migrate -e test" 修复了这个问题 - 在 Padrino rake db:migrate 中似乎只是为开发环境运行迁移。
    • 它现在可以工作了,太棒了!但是,有人可以解释一下这些线条的含义吗?我讨厌在不了解发生了什么的情况下复制/粘贴代码。
    • 第一行只是将默认环境设置为测试,第二行加载 config/boot.rb 文件,该文件依次加载 Padrino 和应用程序 - 第三行加载所有帮助程序,可能不需要但是如果您创建一个新应用程序同时告诉它使用 rspec 进行测试,它会被 padrino 放在那里(-t rspec)
    猜你喜欢
    • 2013-01-03
    • 2012-06-22
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    相关资源
    最近更新 更多