我正在为一个提高互联网可访问性意识的基金会工作.对于演示文稿,我们希望提供一个小型研讨会,模拟人们的不同残疾/损伤.这是通过专门为此演示文稿创建的网站完成的.
其中一个显示的损伤是震颤,这意味着经历摇晃,难以控制的手部动作.由于这种损伤,当鼠标悬停在链接上时,很难准确地移动鼠标光标并按下鼠标按钮.一些老年人和患有疾病的人,例如帕金森氏症,都可能患有震颤.
现在我想以某种方式以不可预测的方式移动鼠标光标,这样人们很难点击一个小按钮.因为JavaScript不允许直接移动鼠标光标,所以我正在寻找其他方法来实现这一点.我提出了以下想法:
虽然第一个想法很酷,但我无法找到像这样的工具,无论是Mac还是Windows.我自己编程这样的东西没有任何技巧.
第二个想法似乎有点笨拙,但我认为它会达到预期的效果.
有人有另一个想法吗?
我想在功能规范中提交表单时检查模型中的许多更改.例如,我想确保用户名从X更改为Y,并且加密密码已更改为任何值.
我知道已经有一些问题,但我找不到合适的答案.最准确的答案似乎ChangeMultiple是迈克尔约翰斯顿的匹配器:RSpec有可能期望两个表的变化吗?.它的缺点是只检查从已知值到已知值的显式变化.
我创建了一些关于我认为更好的匹配器看起来如何的伪代码:
expect {
click_button 'Save'
}.to change_multiple { @user.reload }.with_expectations(
name: {from: 'donald', to: 'gustav'},
updated_at: {by: 4},
great_field: {by_at_leaset: 23},
encrypted_password: true, # Must change
created_at: false, # Must not change
some_other_field: nil # Doesn't matter, but want to denote here that this field exists
)
Run Code Online (Sandbox Code Playgroud)
我还创建了ChangeMultiple匹配器的基本骨架,如下所示:
module RSpec
module Matchers
def change_multiple(receiver=nil, message=nil, &block)
BuiltIn::ChangeMultiple.new(receiver, message, &block)
end
module BuiltIn
class ChangeMultiple < Change
def with_expectations(expectations)
# What to do …Run Code Online (Sandbox Code Playgroud) 我发现这种.and方法对于链接许多期望非常有用.
expect {
click_button 'Update Boilerplate'
@boilerplate_original.reload
} .to change { @boilerplate_original.title }.to('A new boilerplate')
.and change { @boilerplate_original.intro }.to('Some nice introduction')
Run Code Online (Sandbox Code Playgroud)
有什么让我检查没有变化?
.and_not change { @boilerplate_original.intro }
Run Code Online (Sandbox Code Playgroud)
那样的东西?我找不到任何东西,而且很难在Google上搜索"而不是".
我刚刚开始使用YARD来记录我的Rails应用程序.我没有指定任何特定的标记处理程序,但我希望将`code`转换为code,似乎不会发生.这是正常的行为吗?我是否需要添加一些额外的选项才能使其正常工作?谢谢.
出于好奇......在我以前的帖子Rails3.1引擎中:无法让SLIM或HAML在测试/虚拟应用程序中工作我问在哪里告诉Ruby在我的test/dummy应用程序中使用一些gem .
(显而易见的?)答案就是将它放入我的引擎的Gemfile中.这有效,但它让我有点不舒服,因为在耶胡达卡茨 '后澄清.gemspec和Gemfile的角色他提到......
...在开发gem时,Gemfile"gem的Gemfile应包含Rubygems源和单个gemspec行".
另一方面,在我的Engine的Gemfile(使用Rails生成rails plugin new my_engine)中,有:
# jquery-rails is used by the dummy application
gem "jquery-rails"
Run Code Online (Sandbox Code Playgroud)
所以这似乎是正确的.更新:不,它没有!看下面的答案......
仍然,在StackOverflow上的其他地方我看到解决方案据说只需要所需的宝石config/application.rb,而/sf/ask/361172521/ -into-the-it它被告知要充分利用lib/<your_engine>/engine.rb file.
这是我的想法:为什么test/dummy应用程序不会自动要求.gemspec文件中指定的所有Gems ?我们甚至告诉宝石,哪些宝石用于生产,哪些用于开发模式,明确使用add_dependency和add_development_dependency,所以我没有看到任何理由test/dummy不这样做.
所以这是最后一个问题:我究竟要在哪里告诉Ruby在我的test/dummy应用程序中使用gem ?我不想强迫RUBY在主机APP中使用GEM.
我仍然很擅长在Rails 3中测试,我使用RSpec和Remarkable.我已经阅读了很多帖子和一些书籍,但是当我使用该关联的名称时,我仍然有点不确定.
class Project < ActiveRecord::Base
has_many :tasks
end
class Task < ActiveRecord::Base
belongs_to :project
end
Run Code Online (Sandbox Code Playgroud)
由于良好的实践,我想保护我的属性免受大规模任务:
class Task < ActiveRecord::Base
attr_accessible :project # Or is it :project_id??
belongs_to :project
end
Run Code Online (Sandbox Code Playgroud)
首先,我想确保一个项目在没有有效任务的情况下永远不会存在:
class Task < ActiveRecord::Base
validates :project, :presence => true # Which one is the...
validates :project_id, :presence => true # ...right way to go??
end
Run Code Online (Sandbox Code Playgroud)
我还想确保分配的项目或项目ID始终有效:
class Task < ActiveRecord::Base
validates :project, :associated => true # Again, which one is...
validates :project_id, :associated => …Run Code Online (Sandbox Code Playgroud) 我正在努力(但非常有趣的时候)使用Cucumber,RSpec,Selenium和Rails进入行为驱动开发.
我已准备好使用Selenium进行测试,看看Firefox弹出并在我的场景中自动运行会很有趣.但我想做的一件事是暂停或停止某一点的执行,所以我可以检查Selenium在某一点看到的内容.
我知道save_and_open_page命令,但这只显示了没有格式化的纯HTML.那么也许有一个stop_execution方法或什么东西阻止Selenium 而不关闭浏览器?
只是另一个"为什么会这样"的问题:我注意到私有帮助方法仍然可以在视图中访问.为什么?有没有办法防止这种情况(例如,当有辅助方法只能从另一个帮助器中调用时)?
我目前正在尝试将功能转移到引擎中.到目前为止它运行良好,但我有点困惑为什么引擎的某些部分总是在发生变化时自动重新加载,而有些部分则没有.
具体来说,在添加辅助方法时,我必须重新启动Rails服务器,否则Rails不会看到它.这是正常的行为吗?这是我的引擎的相关部分:
组件/ iq_list.rb
# encoding: utf-8
require 'iq_list/engine'
# Load IqList Modules
module IqList
extend ActiveSupport::Autoload
autoload :Helpers
autoload :Models
autoload :Controllers
end
Run Code Online (Sandbox Code Playgroud)
组件/ iq_list/engine.rb
module IqList
class Engine < ::Rails::Engine
end
end
Run Code Online (Sandbox Code Playgroud)
组件/ iq_list/helpers.rb
module IqList
module Helpers
extend ActiveSupport::Autoload
autoload :IqListHelper
end
end
Run Code Online (Sandbox Code Playgroud)
组件/ iq_list /助理/ iq_list_helper.rb
module IqList
module Helpers
module IqListHelper
def some_method
# ...
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
我对引擎还很陌生,上面的很多代码都是从别人的工作中拿走的,所以请耐心等待我.任何暗示正确的方向都受到高度赞赏.
我正在开发一个Rails引擎,所以我对现有的引擎进行了一些研究.我注意到,其中不乏有在文件中app,而且在lib和vendor.
我很清楚,我应该将任何应该由主机应用程序替换的代码放入app文件夹中(例如,当拥有模型时app/user.rb,主机应用程序可以轻松拥有自己的app/user.rb文件并使用此文件而不是引擎程序).
但我不确定,当我必须把东西放进去lib,什么时候进去vendor?我想,在vendor那里,我只应该把其他开发人员或项目中的"外部"代码放在我想要在我的项目中使用的代码中,并且lib我将自己的其他库放在项目中.但是,例如,为什么WiceGrid会将内容放入其wice_grid/vendor/assets目录中?它看起来不像外部代码,但是只为WiceGrid开发的代码应该在lib目录中?
更新
在尝试一下时,我注意到lib在开发引擎时没有重新加载文件夹中的所有代码(我猜这个vendor目录的情况也是如此),所以我应该将它们放入一个文件夹中app,但究竟在哪里呢?
例如,我有一个文件lib/iq_list_controller.rb,其中包含一些类和实例方法ApplicationController,我将其混合到其中,engine.rb如下所示:
initializer "wice_grid_railtie.configure_rails_initialization" do |app|
ActiveSupport.on_load(:action_controller) do
extend IqList::Controller::ClassMethods
include IqList::Controller::InstanceMethods
end
end
Run Code Online (Sandbox Code Playgroud)
我应该把这个文件放在哪里,以便Ruby正确找到它?