标签: minitest

耙子测试没有在最小的时候进行水豚测试

我正在设置一个基本模板,用于在rails应用程序中进行水豚功能测试.我也使用MiniTest而不是RSPEC.

运行Rake测试似乎没有进行我的功能测试.我在文件中有一个测试,运行rake测试不会改变断言的数量.当我运行rake测试时,跳过测试也不会显示.

以下是存储库的链接:https://github.com/rrgayhart/rails_template

以下是我遵循的步骤

  1. 我将它添加到Gemfile并运行bundle

    group :development, :test do
      gem 'capybara'
      gem 'capybara_minitest_spec'
      gem 'launchy'
    end
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我将其添加到test_helper中

    require 'capybara/rails'
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我创建了一个文件夹测试/功能

  4. 我创建了一个名为drink_creation_test.rb的文件

  5. 以下是该功能测试文件的代码

    require 'test_helper'
    
    class DrinkCreationTest < MiniTest::Unit::TestCase
    
      def test_it_creates_an_drink_with_a_title_and_body
          visit drinks_path
          click_on 'new-drink'
          fill_in 'name', :with => "PBR"
          fill_in 'description', :with => "This is a great beer."
          fill_in 'price', :with => 7.99
          fill_in 'category_id', :with => 1
          click_on 'save-drink'
          within('#title') do
            assert page.has_content?("PBR")
          end
          within('#description') do
            assert page.has_content?("td", text: "This is a great beer")
          end
      end …
    Run Code Online (Sandbox Code Playgroud)

ruby-on-rails minitest capybara

4
推荐指数
1
解决办法
1071
查看次数

测试不会自动运行

我正在尝试在我的Exercism文件夹中设置Guard,以便所有测试都自动运行(使用guard-minitest).

文件夹结构如下所示:

.
??? exercism
??? ruby
    ??? bob
    ?   ??? bob.rb
    ?   ??? bob_test.rb
    ??? etl
    ?   ??? etl.rb
    ?   ??? etl_test.rb
...
    ??? binary_search_tree
        ??? bst.rb
        ??? binary_search_tree.rb
        ??? README.md
Run Code Online (Sandbox Code Playgroud)

由于不常见的文件夹结构,我在Guardfile中进行了以下配置:

# tell Guard to watch all folders under ruby/
all_dirs = Dir.glob('ruby/*')

directories all_dirs

options = {
  test_folders: all_dirs, 
  test_file_patterns: '*_test.rb',
  pride: true
}

guard :minitest, options do   
  watch(%r{^ruby/([^/]+)/([^/]+).rb$})
end
Run Code Online (Sandbox Code Playgroud)

通过此设置,我希望在对.rb文件进行任何编辑后运行所有测试.

我在调试模式下运行后卫.

正如所料,所有测试都在启动时运行.

但是,当我编辑.rb文件时,测试不会再次运行,尽管Guard输出:

20:43:26 - DEBUG - Interactor was stopped or killed    
20:43:26 - DEBUG - …
Run Code Online (Sandbox Code Playgroud)

ruby guard minitest

4
推荐指数
1
解决办法
790
查看次数

rake 测试准备:NoMethodError:nil:NilClass 的未定义方法“[]”

当我运行 rake db:test:prepare 时,我总是收到以下错误。什么会导致这种情况?rake db:create 工作正常。

 Adam-MacBook-Pro:katy adam$ bundle exec rake db:test:prepare
    rake aborted!
    NoMethodError: undefined method `[]' for nil:NilClass
    /Users/adam/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.4/lib/active_record/tasks/database_tasks.rb:163:in `purge'
    /Users/adam/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.4/lib/active_record/railties/databases.rake:356:in `block (3 levels) in <top (required)>'
    /Users/adam/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.4/lib/active_record/railties/databases.rake:362:in `block (3 levels) in <top (required)>'
    /Users/adam/.rvm/gems/ruby-2.2.2/bin/ruby_executable_hooks:15:in `eval'
    /Users/adam/.rvm/gems/ruby-2.2.2/bin/ruby_executable_hooks:15:in `<main>'
Run Code Online (Sandbox Code Playgroud)

数据库.yml

<%= Rails.env %>:
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV['DB_POOL'] || 5 %>
  username: <%= ENV['DB_USER'] || 'root' %>
  password: <%= ENV['DB_PASSWORD'] || nil %>
  timeout: <%= ENV['DB_TIMEOUT'] || 5000 %>
  host: <%= ENV['DB_HOST'] || 'localhost' %>
  port: <%= …
Run Code Online (Sandbox Code Playgroud)

ruby rake ruby-on-rails minitest

4
推荐指数
1
解决办法
1664
查看次数

我们可以将一个大型小型测试文件(some_controller_test.rb)分解为多个测试文件吗

我的 Rails 应用程序中有一个名为reports的控制器。该控制器有 4 或 5 个(报告)操作,并且文件不是很大。

我正在使用小型测试来测试我的应用程序。该控制器的测试文件 (reports_controller_test.rb)太大。我只想分解每个报告的测试文件,以便我可以单独为每个报告编写测试。我真的可以将1 个小型测试文件拆分为许多测试文件吗?

testing unit-testing ruby-on-rails minitest rails-4-2-1

4
推荐指数
1
解决办法
1857
查看次数

使用 Minitest 访问控制器实例变量

我正在尝试使用 minitest 访问控制器内的实例变量。

例如:

microposts_controller.rb:

def destroy
  p "*"*40
  p @cats = 42
end
Run Code Online (Sandbox Code Playgroud)

@cats我将如何测试with inside with minitest的值microposts_controller_test.rb

我知道我可以delete从浏览器提交请求并检查我的服务器日志并找到:

"****************************************"
42
Run Code Online (Sandbox Code Playgroud)

我在另一个答案中读到,我可以访问assigns包含所有实例变量的哈希,但它不起作用。我也尝试过查看该controller物体的内部。如下图所示:

microposts_controller.rb:

test "@cats should exist in destroy method" do 
  delete micropost_path(@micropost)
  p controller.instance_variables
  p assigns[:cats]
end
Run Code Online (Sandbox Code Playgroud)

输出:

[:@_action_has_layout, :@_routes, :@_request, :@_response, :@_lookup_context, :@_action_name, :@_response_body, :@marked_for_same_origin_verification, :@_config, :@_url_options]0:04
nil
Run Code Online (Sandbox Code Playgroud)

我期望看到对象@cats内部的实例变量controller。我也期待看到42输出。

我在这里缺少什么?

ruby tdd minitest railstutorial.org ruby-on-rails-5

4
推荐指数
1
解决办法
2733
查看次数

如何在测试方法中存根 HTTParty 请求?

我创建了一个发出 HTTParty get 请求的函数。它会引发我需要测试的自定义错误消息。我尝试在测试中使用 Webmock 来存根请求,但它引发了<Net::OpenTimeout>. 如果 url 是动态构造的,我如何存根 get 请求?

def function(a , b)
# some logic , dynamic url constructed
response = HTTParty.get(url, headers: {"Content-Type" => 
 "application/json"})
if response.code != 200
  raise CustomError.new <<~EOF
    Error while fetching job details.
    Response code: #{response.code}
    Response body: #{response.body}
  EOF
end
JSON.parse(response.body)
Run Code Online (Sandbox Code Playgroud)

为了测试

def test_function
WebMock.stub_request(:get, url).with(:headers => {'Content- 
  Type'=>'application/json'}).to_return(:status => 500)
# HTTParty.stub(get: fake_response)
err = assert_raises CustumError do
   c.function(a , b)
end
Run Code Online (Sandbox Code Playgroud)

ruby minitest httparty webmock

4
推荐指数
1
解决办法
3330
查看次数

Rails 6.1 升级后,作业规范用 Minitest::UnexpectedError 包装错误

升级到Rails 6.1后,测试失败:

class MyJob < ActiveJob::Base
  class MyError < StandardError; end

  def perform
    raise MyError
  end
end

describe MyJob, type: :job do
  it "throws an error" do
    expect do
      perform_enqueued_jobs { MyJob.perform_later }
    end.to raise_error(described_class::MyError)
  end
end
Run Code Online (Sandbox Code Playgroud)

此规范因错误而失败

expected MyJob::MyError, got #<Minitest::UnexpectedError: Unexpected exception> with backtrace:
Run Code Online (Sandbox Code Playgroud)

仔细观察抛出的错误,它看起来像这样:

    69:
    70: describe MyJob, type: :job do
    71:   it "throws an error" do
    72:     expect do
    73:       binding.pry
 => 74:       perform_enqueued_jobs { MyJob.perform_later }
    75:     end.to raise_error(described_class::MyError)
    76:   end
    77: end

[1] pry(#<RSpec::ExampleGroups::MyJob>)> …
Run Code Online (Sandbox Code Playgroud)

ruby rspec ruby-on-rails minitest

4
推荐指数
1
解决办法
624
查看次数

使用Minitest和Devise进行控制器测试失败

在使用Devise的Rails 3.28应用程序中,我设置了一个控制器,用于检查用户是否登录if user_signed_in?.一旦测试达到这条线,我总是会收到undefined method 'authenticate!' for nil:NilClass错误.我想在没有用户登录的场景中测试一些代码.

我想,我需要设置的测试根据在设计维基指定的选项在这里,但是,所有的说明适用于rspec的.

特别是,我认为我需要有以下工作在minitest:

RSpec.configure do |config|
  config.include Devise::TestHelpers, :type => :controller
  config.extend ControllerMacros, :type => :controller
end
Run Code Online (Sandbox Code Playgroud)

有没有人成功设置Devise与minitest合作?

ruby ruby-on-rails minitest devise

3
推荐指数
1
解决办法
2932
查看次数

获取ruby单元测试中断言错误的"回溯"

在为单元测试创​​建辅助方法时,故障的控制台输出仅指示实际断言发生的行.

# Just an example method.
def test_equal(a, b)
  assert_equal a, b # Error indicates this line
end

test_equal(1, 2) # I'd like to know this line
test_equal(2, 3)
Run Code Online (Sandbox Code Playgroud)

有没有办法显示类似"回溯"的内容或为这些断言错误提供更多上下文?

ruby unit-testing minitest

3
推荐指数
1
解决办法
264
查看次数

LoadError:无法加载此类文件 - minitest/reporter

我在测试数据库时遇到错误.

我有两个型号.当我添加第二个和Active Admin gem时,我开始收到错误.

 bundle exec rake test:models --trace
** Invoke test:models (first_time)
** Invoke test:prepare (first_time)
** Execute test:prepare
** Execute test:models
rake aborted!
LoadError: cannot load such file -- minitest/reporters
/Users/nischaynamdev/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activesupport-4.2.2/lib/active_support/dependencies.rb:274:in `require'
/Users/nischaynamdev/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activesupport-4.2.2/lib/active_support/dependencies.rb:274:in `block in require'
/Users/nischaynamdev/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activesupport-4.2.2/lib/active_support/dependencies.rb:240:in `load_dependency'
/Users/nischaynamdev/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activesupport-4.2.2/lib/active_support/dependencies.rb:274:in `require'
/Users/nischaynamdev/RubymineProjects/hostel_mess_pay/test/test_helper.rb:4:in `<top (required)>'
/Users/nischaynamdev/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activesupport-4.2.2/lib/active_support/dependencies.rb:274:in `require'
/Users/nischaynamdev/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activesupport-4.2.2/lib/active_support/dependencies.rb:274:in `block in require'
/Users/nischaynamdev/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activesupport-4.2.2/lib/active_support/dependencies.rb:240:in `load_dependency'
/Users/nischaynamdev/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activesupport-4.2.2/lib/active_support/dependencies.rb:274:in `require'
/Users/nischaynamdev/RubymineProjects/hostel_mess_pay/test/models/admin_user_test.rb:1:in `<top (required)>'
/Users/nischaynamdev/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activesupport-4.2.2/lib/active_support/dependencies.rb:274:in `require'
/Users/nischaynamdev/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activesupport-4.2.2/lib/active_support/dependencies.rb:274:in `block in require'
/Users/nischaynamdev/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activesupport-4.2.2/lib/active_support/dependencies.rb:240:in `load_dependency'
/Users/nischaynamdev/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activesupport-4.2.2/lib/active_support/dependencies.rb:274:in `require'
/Users/nischaynamdev/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/railties-4.2.2/lib/rails/test_unit/sub_test_task.rb:114:in `block (3 levels) in define'
/Users/nischaynamdev/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/railties-4.2.2/lib/rails/test_unit/sub_test_task.rb:114:in `each'
/Users/nischaynamdev/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/railties-4.2.2/lib/rails/test_unit/sub_test_task.rb:114:in `block (2 levels) …
Run Code Online (Sandbox Code Playgroud)

ruby testing ruby-on-rails minitest

3
推荐指数
1
解决办法
2491
查看次数