如果这个问题有点主观,我道歉...我正在试图找出用黄瓜和Rspec测试Rails 3引擎的最佳方法.为了测试发动机,需要使用导轨3 app.这是我目前正在做的事情:
通过运行以下命令将rails测试应用添加到gem(myengine)的根目录: rails new /myengine/rails_app
/myengine/rails_app/features像在普通的Rails应用程序中一样添加Cucumber
需要Rails Engine Gem(使用:path=>"/myengine")in/myengine/rails_app/Gemfile
将spec添加到gem的根目录: /myengine/spec
包括夹具,/myengine/spec/fixtures我将以下内容添加到我的cuc env.rb中:
env.rb:
Fixtures.reset_cache
fixtures_folder = File.join(Rails.root, 'spec', 'fixtures')
fixtures = Dir[File.join(fixtures_folder, '*.yml')].map {|f| File.basename(f, '.yml') }
Fixtures.create_fixtures(fixtures_folder, fixtures)
Run Code Online (Sandbox Code Playgroud)
你看到这样设置有什么问题吗?测试运行正常,但我有点犹豫要把功能放在测试轨应用程序中.我最初尝试将这些功能放在gem的根目录中,并且我在里面创建了测试rails应用程序features/support,但由于某些原因,当我运行测试时我的引擎不会初始化,即使我可以看到应用程序在cuc运行时加载其他所有内容.
如果有人正在使用Rails Engines并使用cuc和rspec进行测试,我将有兴趣听听您的设置.
**更新
自从我写这个问题以来,我改变了我的设置.我决定摆脱引擎根目录下的spec目录.现在我只创建一个名为"test_app"的rails应用程序,并在该应用程序中设置cuc和rspec,就像我通常在rails应用程序中所做的那样.然后我像上面步骤#3中那样包含宝石.由于引擎是一个子应用程序,我想它最好测试它就像一个普通的rails应用程序.如果有人有不同的设置,我仍然有兴趣听到.
更新2这是一个已知的错误/功能,Ruby 1.9.2加载文件的方式. http://twitter.com/#!/rails/status/72801149769621504
更新:这开始是一个问题,但经过一段时间的努力,我认为它可能无法修复.我想我会发布这个以防其他人看到同样的事情,并想知道在rails和bundler里面发生了什么.
是否有其他人在他们的Rails 3应用程序中看到长时间加载?我将计时器放在environment.rb,application.rb,boot.rb和railties/lib/rails/initializable.rb中.时间以秒为单位,经过时间是自上次记录时间以来的时间.生产加载时间需要更长的时间.部分原因是因为硬件较少而且来自eager_load!(也许来自Thin vs Mongrel).看起来Bundler正占据了大部分的加载时间,我猜这是可以预料的.我测试了dev和prod中的一个应用程序,以及dev中的一个空白应用程序.我测试了2个app服务器,看看它是否是Thin导致它.我也看到了与乘客相似的事情(这使得它在2.2.15中无法使用产生行为的b/c).我对边缘Rails进行了测试,开发中的性能略差14.5秒对14.2秒.如果我删除了我的测试依赖项,它会节省2-3秒,但是当我运行测试时这没有用.我想等待5分钟让我的所有Thin实例重新启动并在测试运行前等待15秒有点烦人,但这是一个可接受的权衡,因为我用Rails 3获得了生产力.如果有人有任何想要帮助加快速度,我全都听见了.以下是测试结果:
注意:我在Rails 2.3中的应用程序在dev中加载时间不到3秒(虽然我已经将一些代码转换为引擎并且自从转移到rails3后添加了haml和twitter_oauth gems)
**使用Rails 3RC和Ruby 1.9.2rc2进行的所有测试
精简版 - CentOS 5.5,Rackspace云服务器2GB实例
测试应用程序#1,具有24个宝石依赖项
start env.rb - Total=0
start app.rb - 0.00110546 elapsed. Total=0.001180052
start boot.rb - 0.000600488 elapsed. Total=0.00178644
end boot.rb - 0.7935529 elapsed. Total=0.795507318
start require rails/all - 0.000189127 elapsed. Total=0.795701199
end require rails/all - 1.086998364 elapsed. Total=1.882735263
start Bundler require - 0.000109708 elapsed. Total=1.88285043
end Bundler require - 8.955853243 elapsed. Total=10.838746673
end app.rb - 0.062975913 elapsed. Total=10.901753753
# … 我在让Haml关闭br标签时遇到问题.我试过以下没有运气:
%br
%br/
Run Code Online (Sandbox Code Playgroud)
我希望这会产生<br />,但它总是输出<br>,即使结尾有斜杠字符.我也尝试将以下选项添加到application.rb(我尝试了environment.rb)
Haml::Template.options[:autoclose] = ['meta', 'img', 'link', 'br', 'hr', 'input', 'area', 'param', 'col', 'base']
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?我虽然Haml应该默认自动关闭这些标签?
目前(2018年2月13日)Sourcetree仅支持在Mac版本中提交签名.
从这个问题(自2013年以来)提交签名仍然不适用于Windows版本.
那么有可能在Windows版的sourcetree中签名提交吗?
我打算创建一个基于Cucumber场景生成应用程序代码的插件,但我想确保我不是在这里重新发明轮子.有人知道一个与Cucumber一起使用并生成模型,控制器和视图的插件吗?
关于我想要做的事情的一点背景,如果这没有意义.当我在这里创建新应用程序时,我的工作流程是:
在我的白板上绘制出两种类型的高级设计.1显示模型和关系,另一个显示布局,表单等的一些原始屏幕.
根据高级设计编写黄瓜场景(但细粒度).其中许多步骤仅描述了我将在特定视图中看到的内容,并概述了应用程序的流程.我发现在开始编码之前创建我能想到的所有场景比在编写每个场景之后一次完成一个并编码更好.
我运行黄瓜场景并查看第一次失败并从那里开始编码.在此步骤之前,我通常会进行一些额外的设置,以便根据我的偏好配置我的Rails应用程序,并包含我知道我将使用的宝石.我还找到了运行我的功能文件的逻辑顺序,因为有些文件依赖于其他文件.显然从身份验证开始.
然后我使用Rails生成器(脚手架或只是模型)来帮助我创建传递场景所需的代码.我改变了一些生成器模板,给了我想要的东西.
然后我根据需要调整生成的代码.大多数情况下,这涉及在模型中建立关系,使用视图中的关联以及脚手架无法提供的任何其他非标准功能.
如有必要,我会运行迁移
然后我重新运行我的场景并重复4-6中的任何步骤,直到场景通过.
重复步骤4-7,直到所有方案都通过.
我可能错了,但我认为很多人可能会使用类似的方法.让我烦恼的是,我在编写场景和生成/调整代码之间看到了很多重复.我希望能够使用我的黄瓜场景生成我的应用程序的skelaton,并使用步骤定义来帮助我自定义生成的内容.这是一个例子:
Scenario: MODEL widget exists
Given a widget model exists
Then it should belong to a "manufacturer"
And it should have a "quantity:integer" field
And it should validate the presence of "quantity"
And it should have many "wadgets"
And it should accept nested attributes for "wadgets"
#etc...
Scenario: VIEW new widget page
Given I am on the new widgets page
Then I should see a "quantity" field
And I should …Run Code Online (Sandbox Code Playgroud) 现在,您不能通过/app在父应用程序的/app目录中添加相同的类来重新打开引擎目录中包含的Engine类.例如:
/my_engine/app/controllers/users_controller.rb
/my_app/app/controllers/users_controller.rb
Run Code Online (Sandbox Code Playgroud)
my_engine如果父应用程序中存在同名文件,则甚至不会加载文件.更多细节在这里:
我正在寻找一种解决方法,允许我在与父应用程序相同的路径中删除相同的文件名/类,并重新打开而不是覆盖该类.也许我错过了一些明显的东西.我能够使用一个使用class_eval的单独文件(不同的文件名)来完成这项工作,但我对这个解决方案并不满意.关于优雅解决方案的任何想法?
我也想知道这个限制背后是否有原因,或者它只是rails如何加载文件(参见包含链接)而非故意的结果.在我看来,改变引擎的加载行为以允许以这种方式重新打开类将是rails中的一个很好的特性.我知道一开始我很困惑,我相信其他开发人员也会对这个问题感到困惑.
我需要使用AWS API网关来传达elasticache(Redis引擎).我在同一个VPC中成功连接了lambda函数的ElastiCache.我无法从外部VPC连接.
所以我尝试创建一个API网关,并选择集成类型作为AWS Service Proxy和AWS Service作为ElastiCache.
这是创建API网关的屏幕截图
但我不知道,如何测试这个创建的API来执行Redis命令.
eg: SET A FOO
Run Code Online (Sandbox Code Playgroud)
是否可以使用API网关传达ElastiCache?
amazon-web-services amazon-elasticache aws-lambda aws-api-gateway
我的控制器创建功能是
def create
@group = Group.new(params[:group])
@group.company=current_user.company
respond_to do |format|
if @group.save
format.html { redirect_to(@group, :notice => 'Group was successfully created.') }
format.js
else
flash.now[:error]=@group.errors.full_messages
format.html { render :nothing => true }
format.js
end
end
end
Run Code Online (Sandbox Code Playgroud)
create.js.erb文件是
$('<%= escape_javascript(render(:partial => @group))%>').appendTo('#groups');
$("#new_group")[0].reset();
Run Code Online (Sandbox Code Playgroud)