我的测试套件直到最近才处理任何JS功能.我开始只在我的机器上使用selenium-webdriver javascript驱动程序和firefox 47.0.1,没有任何问题.然后我迁移到poltergeist支持PhantomJS我的javascript驱动程序.我不得不对一些破损的测试进行一些修改,但非常喜欢转换并在PhantomJS/poltergeist上"卖".
我预计测试会传递给我的Gitlab-ci,就像它们在我的机器上一样(嘿,我们可以梦想),可能需要一些配置调整.
Ruby - 2.3.1
Rails - 5.0.0.1
恶作剧者 - 1.12.0
rspec - 3.5.0
rspec-rails - 3.5.1
水豚 - 2.11.0
cliver - 0.3.2
factory_girl_rails - 4.7.0
phantomjs - 2.1.1(在我的机器和CI服务器上)
require 'capybara/rspec'
require 'capybara/poltergeist'
Capybara.default_driver = :rack_test
Capybara.register_driver :poltergeist do |app|
options = {
:js_errors => false,
:timeout => 360,
:phantomjs_options => ['--load-images=no', '--ignore-ssl-errors=yes', '--disk-cache=false']
}
Capybara::Poltergeist::Driver.new(app, options)
end
Capybara.javascript_driver = :poltergeist
Run Code Online (Sandbox Code Playgroud)
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.strategy = …Run Code Online (Sandbox Code Playgroud) 我正在为一个我没有构建的应用程序编写控制器测试,所以这肯定是一个学习过程.这是我第一次遇到直接从AbstractController :: Base继承的控制器.显然,它与其他控制器的行为不同.
其格式大致为:
class SchwadGenericController < AbstractController::Base
def schwad_method var_one, var_two = nil, var_three = nil
if var_two.blank?
var_one.generic_method
end
render template: "schwad_templates/generic_template", layout: false
end
end
Run Code Online (Sandbox Code Playgroud)
我尝试了正常测试,这是我目前所处的任何事情.
require 'rails_helper'
describe SchwadGenericController do
# before(:each) do
# SchwadGenericController.skip_authorize_resource
# end
# login_user
let!(:variable){ create(:my_factory_variable) }
describe 'controller methods' do
it 'should hit this method' do
binding.pry
SchwadGenericController.schwad_method(variable)
# expect(response).to_render template: "schwad_templates/generic_template"
end
end
end
Run Code Online (Sandbox Code Playgroud)
这里大致是我失败的地方.
Failures:
1) SchwadGenericController controller methods should hit this method
Failure/Error: Unable to …Run Code Online (Sandbox Code Playgroud) 我最近正在进行Rails 5升级,当我尝试启动rails控制台时遇到此错误:
/actionpack-5.0.0/lib/action_controller/test_case.rb:49:in initialize': wrong number of arguments (0 for 2) (ArgumentError)
目前bundle update rails已经完成了对gem依赖关系的解决,足以进行5.0.0的更新,rspec正在运行(虽然我正在修复很多休息).我也可以运行rails s没有错误.
这是破解代码的行:
https://github.com/rails/rails/blob/master/actionpack/lib/action_controller/test_case.rb
全栈:
/Users/this_is_my_username/.rvm/gems/ruby-2.2.3/gems/actionpack-5.0.0/lib/action_controller/test_case.rb:49:in `initialize': wrong number of arguments (0 for 2) (ArgumentError)
from /Users/this_is_my_username/.rvm/gems/ruby-2.2.3/gems/draper-2.1.0/lib/draper/view_context/build_strategy.rb:41:in `new'
from /Users/this_is_my_username/.rvm/gems/ruby-2.2.3/gems/draper-2.1.0/lib/draper/view_context/build_strategy.rb:41:in `block in controller'
from /Users/this_is_my_username/.rvm/gems/ruby-2.2.3/gems/draper-2.1.0/lib/draper/view_context/build_strategy.rb:40:in `tap'
from /Users/this_is_my_username/.rvm/gems/ruby-2.2.3/gems/draper-2.1.0/lib/draper/view_context/build_strategy.rb:40:in `controller'
from /Users/this_is_my_username/.rvm/gems/ruby-2.2.3/gems/draper-2.1.0/lib/draper/view_context/build_strategy.rb:30:in `call'
from /Users/this_is_my_username/.rvm/gems/ruby-2.2.3/gems/draper-2.1.0/lib/draper/view_context.rb:49:in `build'
from /Users/this_is_my_username/.rvm/gems/ruby-2.2.3/gems/draper-2.1.0/lib/draper/railtie.rb:63:in `block in <class:Railtie>'
from /Users/this_is_my_username/.rvm/gems/ruby-2.2.3/gems/railties-5.0.0/lib/rails/railtie.rb:226:in `call'
from /Users/this_is_my_username/.rvm/gems/ruby-2.2.3/gems/railties-5.0.0/lib/rails/railtie.rb:226:in `block in run_console_blocks'
from /Users/this_is_my_username/.rvm/gems/ruby-2.2.3/gems/railties-5.0.0/lib/rails/railtie.rb:247:in `each'
from /Users/this_is_my_username/.rvm/gems/ruby-2.2.3/gems/railties-5.0.0/lib/rails/railtie.rb:247:in `each_registered_block'
from /Users/this_is_my_username/.rvm/gems/ruby-2.2.3/gems/railties-5.0.0/lib/rails/railtie.rb:226:in `run_console_blocks'
from /Users/this_is_my_username/.rvm/gems/ruby-2.2.3/gems/railties-5.0.0/lib/rails/application.rb:463:in `block in run_console_blocks' …
Rails版本: 4.2.7
Ruby版本: 2.3.3
我正在运行rake任务,将数百万个对象从CSV和JSON文件格式迁移到我的postgres数据库中.
我试图利用activerecord-import加速将对象写入数据库.
尽可能简化代码,前半部分处理对象类型1(来自一种数据类型),后半部分处理对象类型2.
第一个对象类型迭代如此(为问题简化):
importing_object_one_array = []
my_external_data.each do |element|
new_element = ObjectOne.new(
title: element[0],
body: element[1]
)
importing_object_one_array << new_element
end
ObjectOne.import importing_object_one_array, validate: false
Run Code Online (Sandbox Code Playgroud)
这个大约有250,000个对象运行,写的没有任何问题,我在控制台中进行了检查,并成功编写了对象.
但是,对象类型2具有相当多的额外对象,每个对象的大小和设计大致与对象类型1相同.
其中大约有4,040,000个.
我应该等多久ObjectTwo.import才能跑?我们现在已经好几个小时了.
或者,从调试的角度来看(因为我真的不想重新运行这个rake任务,除非我绝对不得不这样做),有什么脚本或策略可以看看当前是否ObjectTwo.import真的在运行(即使它正在运行)或者任务挂?
我检查了rails控制台,我们看起来仍然ObjectTwo和以前一样在数据库中.
我唯一的另一个想法是,因为我没有在运行之前打印到控制台#import(例如puts "Now starting import!"),我没有100%证明阵列中构建的对象已经完成.
当我在功能测试中遇到错误时,堆栈跟踪和错误将存储在我的机器和我们的 CI 的控制台上的结果中。
IE undefined method '#dance' for nilClass at line 36 of app/models/dancer.rb
我们最近更新了代码库,以对特定数据表和特定视图使用“延迟加载”(或服务器端加载)。这意味着在 JS/功能测试中,如果视图中的某些内容没有正确加载,而不是呈现错误,我们只是有一个永不停止旋转的微调器和超时错误(或找不到的东西)。
现在,如果我正在使用 Rails 服务器处理开发中的页面,并且延迟加载器的 POST 请求失败,我可以直接跳到我的终端并检查堆栈跟踪和发生了什么。
如何更新我的 Rspec/Capybara 测试以使其更加详细,并且当这些服务器端错误发生在延迟加载器请求上时,实际上将其解决为过去的测试失败情况?
真诚地感谢您可以提供的任何帮助,并且非常乐意跟进您可能需要的任何其他信息。
最新版本jquery-tmpl-rails会触发 sprockets 弃用警告:
DEPRECATION WARNING: Sprockets method `register_engine` is deprecated.
Please register a mime type using `register_mime_type` then
use `register_compressor` or `register_transformer`.
https://github.com/rails/sprockets/blob/master/guides/extending_sprockets.md#supporting-all-versions-of-sprockets-in-processors
(called from block (2 levels) in <class:Railtie> at /my/path/to/gems/jquery-tmpl-rails-ef6f58001d41/lib/jquery-tmpl-rails/engine.rb:10)
Run Code Online (Sandbox Code Playgroud)
在弃用警告之后,gem 中的问题就在这里:https : //github.com/jimmycuadra/jquery-tmpl-rails/blob/master/lib/jquery-tmpl-rails/engine.rb#L10
目前是:
app.assets.register_engine(".tmpl", JqueryTemplate)
然后,我访问了 sprockets 指南,用于处理 sprockets 2,3,4 的弃用、可扩展性和合规性。https://github.com/rails/sprockets/blob/master/guides/extending_sprockets.md#supporting-all-versions-of-sprockets-in-processors
我尽最大努力通过在此叉上提交来纠正问题:https : //github.com/oceanshq/jquery-tmpl-rails/commit/de7a59894f512efb3c1eba432da3517f21d921a2
这是:
asset.register_mime_type 'application/javascript', extensions: ['.tmpl'], charset: :unicode
asset.register_preprocessor 'application/javascript', JqueryTemplate
Run Code Online (Sandbox Code Playgroud)
然而,当尝试运行 Web 应用程序或在 CI 上测试它时,这种尝试只是简单地处理故障。所以显然我错过了一些东西。
ruby ×5
rspec ×3
capybara ×2
activerecord ×1
factory-bot ×1
phantomjs ×1
poltergeist ×1
sprockets ×1