我编写了一个带有命名空间Posts的Rails 3.1引擎.因此,我的控制器可以在app/controllers/posts /中找到,我的模型可以在app/models/posts等中找到.我可以很好地测试模型.一个型号的规格看起来像......
module Posts
describe Post do
describe 'Associations' do
it ...
end
Run Code Online (Sandbox Code Playgroud)
......一切正常
但是,控制器的规格不起作用.Rails引擎安装在/ posts,但控制器是Posts :: PostController.因此,测试将控制器路由视为帖子/帖子.
describe "GET index" do
it "assigns all posts as @posts" do
Posts::Post.stub(:all) { [mock_post] }
get :index
assigns(:posts).should eq([mock_post])
end
end
Run Code Online (Sandbox Code Playgroud)
产量......
1) Posts::PostsController GET index assigns all posts as @posts
Failure/Error: get :index
ActionController::RoutingError:
No route matches {:controller=>"posts/posts"}
# ./spec/controllers/posts/posts_controller_spec.rb:16
Run Code Online (Sandbox Code Playgroud)
我已经在测试应用程序的路由文件...:命名空间等尝试了各种技巧,但无济于事.
我该如何工作?似乎它不会,因为引擎将控制器置于/ post,但命名空间将控制器置于/ posts/posts以进行测试.
网上有很多例子(例如http://techoctave.com/c7/posts/32-create-an-rss-feed-in-rails),展示了如何使用Builder制作精美的RSS源.规范模板是这样的:
xml.instruct! :xml, :version => "1.0"
xml.rss :version => "2.0" do
xml.channel do
xml.title "Your Blog Title"
xml.description "A blog about software and chocolate"
xml.link posts_url
for post in @posts
xml.item do
xml.title post.title
xml.description post.content
xml.pubDate post.posted_at.to_s(:rfc822)
xml.link post_url(post)
xml.guid post_url(post)
end
end
end
Run Code Online (Sandbox Code Playgroud)
这在Rails 3.0.7中运行良好.在Rails 3.1 Edge中,每个命令似乎都会产生......
Rendered home/index.rss.builder (25.2ms)
Completed 500 Internal Server Error in 875ms
ActionView::Template::Error (wrong number of arguments (1 for 0)):
1: xml.instruct!(:xml, :encoding => "UTF-8")
2:
3: xml.rss :version => "2.0" …Run Code Online (Sandbox Code Playgroud) 假设我在Mac OS X上安装了PhantomJS,我可以编写一个普通的旧Ruby脚本(没有Cucumber,没有RSpec)来驱动Poltergeist吗?换句话说,我想要一些宝石,将Capybara驱动程序设置为Poltergeist,然后开始调用page.fn()来下载页面,分析内容等等?
更新:这是我创建的.它似乎工作.
require 'awesome_print'
require 'capybara'
require 'capybara/dsl'
require 'capybara/poltergeist'
Capybara.javascript_driver = :poltergeist
Capybara.run_server = false
Capybara.app_host = 'http://www.google.com'
Capybara.current_driver = :poltergeist
include Capybara::DSL
visit '/'
page.driver.network_traffic.each do |request|
ap request.response_parts
end
Run Code Online (Sandbox Code Playgroud)
我知道裸体包含是坏的,但我只是在我将它封装在一个类之前的那一刻.
反馈?
我可以使用两个数据库创建表db:create吗?例如,我可以在database.ymlfor one_development和for中two_development创建条目rake db:create吗?我知道rake db:create:一切正常 - 我只是想知道是否有办法根据RAILS_ENV对创建的内容进行分段?