我正在将我的Capybara测试套件从capybara-webkit转换为poltergeist.
-require 'capybara/webkit'
+require 'capybara/poltergeist'
-Capybara.javascript_driver = :webkit
+Capybara.javascript_driver = :poltergeist
Run Code Online (Sandbox Code Playgroud)
在运行我的测试时,第一次测试失败并显示此消息...
Failure/Error: Unable to find matching line from backtrace
ActionController::RoutingError:
No route matches [GET] "/assets/fonts/glyphicons-halflings-regular.ttf"
Run Code Online (Sandbox Code Playgroud)
经过一番调查,我发现类似的问题在这里.
但是,我有一个bootstrap.css的手动安装.我按照第二个答案中的建议调整了路径,并收到了更新路径的相同消息.
经过一段时间和挫折之后,我意识到这只是我套房中的第一次测试失败,其余的都通过了.很自然地,我删除了第一个测试.现在,"新"第一次测试失败,其余测试通过.所以我把它们全部删除了.现在,他们都没有失败!测试很简单!结束.
是什么让我的第一次测试失败?为什么其余的都过去了?
更多信息请求.
在定义依赖于另一个要设置的方法的虚拟setter方法时,看起来在哈希中设置的属性的顺序很重要.有没有办法围绕这个仍然大规模分配属性?
https://gist.github.com/3629539
编辑
实例中未显示的条件是检查关联对象是否存在.如果对象存在,请设置一个值.如果没有,请忽略传入的值.但是,我也使用accepts_nested_attributes_for.因此,属性哈希可以包含关联的属性.在这种情况下,对象将存在.
{:name => 'Fred', :nested_attributes => {:color => 'red'}}
Run Code Online (Sandbox Code Playgroud)
将不会设置名称,因为该模型将不存在.
{:nested_attributes => {:color => 'red'}, :name => 'Fred'}
Run Code Online (Sandbox Code Playgroud)
accepts_nested_attributes_for将构建一个嵌套实例,然后设置属性.当要设置名称时,实例将存在并且将设置嵌套属性.
我希望将几个模型共享的功能抽象到一个模块中.
我有这个型号:
class Report < ActiveRecord::Base
include AppModel
has_and_belongs_to_many :tag
belongs_to :city
belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)
(另外,如何让我的代码在stackoverflow上跨越多行?它不会保留我的换行符.)
然后我有一个模块(在app/models/app_model.rb中):
module AppModel
def self.list
find(:all, :order => 'name asc').map { |item| [item.name, item.id] }
end
end
Run Code Online (Sandbox Code Playgroud)
但如果我这样做Report.list
不起作用.我怀疑在我做的模块中是否存在问题def function
或者def self.function
?
如此反复,我的问题是,如何让我访问的功能,例如Report.list
或者Report.find_tagged
是一个模块中定义.