小编Nic*_*rer的帖子

Poltergeist/PhantomJS在Gitlab CI中崩溃

背景:

我的测试套件直到最近才处理任何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服务器上)

Capybara配置:

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)

DatabaseCleaner配置

  config.before(:suite) do
    DatabaseCleaner.clean_with(:truncation)
  end

  config.before(:each) do
    DatabaseCleaner.strategy = …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails capybara phantomjs poltergeist

7
推荐指数
1
解决办法
409
查看次数

Rspec控制器在Rails中测试一个继承自AbstractController :: Base的控制器

我正在为一个我没有构建的应用程序编写控制器测试,所以这肯定是一个学习过程.这是我第一次遇到直接从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)

ruby rspec ruby-on-rails factory-bot

6
推荐指数
1
解决办法
696
查看次数

Rails 5升级:/ actionpack-5.0.0/lib/action_controller/test_case.rb:49:in`initialize':错误的参数个数(0表示2)(ArgumentError)

我最近正在进行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' …

ruby ruby-on-rails ruby-on-rails-5

6
推荐指数
1
解决办法
780
查看次数

我应该允许activerecord-import运行多长时间?

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%证明阵列中构建的对象已经完成.

ruby activerecord ruby-on-rails activerecord-import

5
推荐指数
1
解决办法
210
查看次数

如何使用延迟加载器捕获 Capybara Feature JS 测试中的服务器端错误?

版本:

  • 导轨 5.0.2
  • 规范 3.5.0
  • rspec-rails 3.5.1
  • capybara 2.12.1(带有用于 JS 测试的 chromedriver/selenium)
  • 红宝石 2.3.3
  • gitlab-ci

过去(和期望)的行为

当我在功能测试中遇到错误时,堆栈跟踪和错误将存储在我的机器和我们的 CI 的控制台上的结果中。

IE undefined method '#dance' for nilClass at line 36 of app/models/dancer.rb

当前行为

我们最近更新了代码库,以对特定数据表和特定视图使用“延迟加载”(或服务器端加载)。这意味着在 JS/功能测试中,如果视图中的某些内容没有正确加载,而不是呈现错误,我们只是有一个永不停止旋转的微调器和超时错误(或找不到的东西)。

现在,如果我正在使用 Rails 服务器处理开发中的页面,并且延迟加载器的 POST 请求失败,我可以直接跳到我的终端并检查堆栈跟踪和发生了什么。

如何更新我的 Rspec/Capybara 测试以使其更加详细,并且当这些服务器端错误发生在延迟加载器请求上时,实际上将其解决为过去的测试失败情况?

真诚地感谢您可以提供的任何帮助,并且非常乐意跟进您可能需要的任何其他信息。

ruby rspec ruby-on-rails capybara selenium-chromedriver

5
推荐指数
1
解决办法
306
查看次数

修复链轮弃用:不推荐使用方法`register_engine`

版本

  • 红宝石 2.4.3
  • 导轨 5.1.3
  • 链轮 3.7.3
  • jquery-tmpl-rails 1.1.0

问题:

最新版本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 ruby-on-rails jquery-templates sprockets

5
推荐指数
0
解决办法
570
查看次数