标签: minitest

Capybara接受DSL与MiniTest :: Spec?

Capybara的自述文件(参见使用Capybara和MiniTest :: Spec)说我可以这样做,如果我正确地包含模块,但它没有提供任何说明性的例子如何...我试过包括像这样的模块:

class MiniTest::Spec
  include Capybara::DSL
end
Run Code Online (Sandbox Code Playgroud)

......无济于事 我一直收到这个错误:

<main>': undefined methodfeature'for main:Object(NoMethodError)

如何在注释掉的代码中编写它?


规格/接受/ API/reward_terms_spec.rb:

require "#{Dir.pwd}/spec/acceptance/acceptance_helper"

# this syntax works...

describe 'reward terms acceptance test' do
  include Capybara::DSL

  describe '#index' do
    specify {
      visit '/reward_terms'
      # ...
    }
  end
end

# this syntax doesn't work...

# feature 'RewardTerms', %q{
#   In order to get all reward terms available to me
#   As an API client
#   I want to list all active RewardTerms
# …
Run Code Online (Sandbox Code Playgroud)

dsl minitest capybara ruby-on-rails-3

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

如何使用单元样式为minitest配置集成测试

我找到了配置Rails以使用Minitest的资源.遗憾的是,大多数资源都假设Minitest Spec适用于所有测试类型,或者在最好的情况下,至少用于集成测试.

我可能是"复古",但我觉得断言是一个测试:单位工作对我来说比rspec风格更好.我将使用MiniTest :: Unit声明样式与Capybara一起运行集成测试.

我有兴趣看到minitest_helper.rb和some_model_integration_test.rb的示例,以了解我需要采用的相关配置元素,以使集成测试与Capybara完美配合.

有人可以解释如何为此配置Rails吗?

ruby unit-testing ruby-on-rails minitest

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

使用Minitest,需要'minitest_helper'加载错误

我正在测试Minitest :: Spec作为RSpec的替代品,但我有一个麻烦的问题我无法找到答案:

我已经设置了一些基本规格spec/models/*_spec.rb.我的rails应用程序包括minitest-rails,我已经设置了我的rakefile如下:

Rake::TestTask.new do |t|
  t.libs.push "lib"
  t.test_files = FileList['spec/**/*_spec.rb']
  t.verbose = true
end
task :default => :test
Run Code Online (Sandbox Code Playgroud)

现在,如果我像这样编写我的spec文件:

require 'minitest_helper'

describe User do
  ...
end
Run Code Online (Sandbox Code Playgroud)

...然后跑rake test,我得到:

user_spec.rb:1:in `require': cannot load such file -- minitest_helper (LoadError)
Run Code Online (Sandbox Code Playgroud)

但是,如果我将需求行更改为

require_relative '../minitest_helper'
Run Code Online (Sandbox Code Playgroud)

然后它工作.所以,这是功能性的,但似乎每个使用我在网上找到的最小规格的人的例子都让他们只是打电话require 'minitest_helper',而不是require_relative.那么,我错过了什么让那些为别人工作但不在我的情况下呢?

最后一条信息,我的帮助文件如下所示:

# spec/minitest_helper.rb
ENV["RAILS_ENV"] = "test"
require File.expand_path('../../config/environment', __FILE__)

require "minitest/autorun"
require "minitest/rails"

# Uncomment if you want Capybara in accceptance/integration tests
# require "minitest/rails/capybara"

# …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails minitest

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

最小的测试和代码覆盖率

mini-test用于测试框架.我使用omniauthgem进行身份验证.我simplecov用于代码覆盖.我用"bundle exec rake"或运行我的测试"rake minitest:controllers".我举一个控制器的例子.当我运行时rake minitest:controllers,控制器代码覆盖率变为100%.但是,当我运行时bundle exec rake,控制器代码覆盖率变为60%.

SessionsController.rb代码:

 class SessionsController < ApplicationController
   def create
     auth = request.env["omniauth.auth"]
     person=Person.find_by_provider_and_uid(auth.provider,auth.uid) || Person.create_with_omniauth(auth)
     redirect_to root_path
   end
end
Run Code Online (Sandbox Code Playgroud)

SessionsController_test.rb

require "minitest_helper"

describe SessionsController do
  before do
    request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:identity] 
    @person = Fabricate.build(:person)
  end

  it "should create authentication" do
    assert_difference('Person.count') do
      post :create, :provider => "identity"
    end
    assert_redirected_to root_path @person
  end
end
Run Code Online (Sandbox Code Playgroud)

我想知道如果我在写测试时错过了一点.我等你的想法.提前致谢.

编辑

minitest_helper.rb

require 'simplecov'
Simplecov.start

ENV["RAILS_ENV"] = "test" …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails minitest omniauth

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

最小测试未初始化的常量错误

我正在尝试使用Spec语法运行Minitest rake test并出现以下错误:

/path/to/gem/spec/script_spec.rb:3:in `<top (required)>': uninitialized constant MyGem (NameError)
Run Code Online (Sandbox Code Playgroud)

我的Rakefile:

require 'rake/testtask'

Rake::TestTask.new do |t|
  t.test_files = FileList['spec/*_spec.rb']
end
Run Code Online (Sandbox Code Playgroud)

我的文件结构:

gem/
--lib/
----script.rb
--spec/
----script_spec.rb
--Rakefile
Run Code Online (Sandbox Code Playgroud)

我的script.rb:

module MyGem
  class OptionParser
    def self.option?(arg)
      arg =~ /^-{1,2}\w+$/
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

在script_spec.rb中使用Minitest :: Spec语法:

require "minitest/autorun"

describe MyGem::OptionParser do
  describe "option?" do
    it "must be true for option name" do
      OptionParser.option?('--nocolor').assert true
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我如何解决它?也许lib文件夹未加载?我会错过与Spec语法相关的内容吗?

ruby minitest

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

Rails测试错误 - NameError:TestCase :: SUPPORTS_INFO_SIGNAL

在我的Rails应用程序中,我已经将Ruby更新1.9.32.1.0.现在,当我重新开始测试时,我收到一个错误:

NameError: uninitialized constant MiniTest::Unit::TestCase::SUPPORTS_INFO_SIGNAL
Run Code Online (Sandbox Code Playgroud)

以下是宝石Gemfile:

gem 'rails'
gem 'mysql2'
gem 'json'
gem 'jquery-rails'
gem 'kaminari'
gem 'therubyracer'
gem 'devise'
gem 'rak'
gem 'rails-translate-routes'
gem 'routes'

group :assets do
  gem 'sass-rails', " ~> 3.2.3"
  gem 'uglifier', ' >= 1.0.3'
end

group :development, :test do
  gem 'factory_girl_rails'
end

group :test do
  gem 'shoulda'
  gem 'database_cleaner'
  gem 'capybara'
end
Run Code Online (Sandbox Code Playgroud)

这是堆栈跟踪:

`NameError: uninitialized constant MiniTest::Unit::TestCase::SUPPORTS_INFO_SIGNAL
~/.rvm/gems/ruby-2.1.0@kalender/gems/mocha-0.10.5/lib/mocha/integration/mini_test/version_230_to_262.rb:19:in `run'`
~/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/test/unit/testcase.rb:17:in `run'
~/.rvm/gems/ruby-2.1.0@kalender/gems/activesupport-3.2.12/lib/active_support/testing/setup_and_teardown.rb:36:in `block in run'
~/.rvm/gems/ruby-2.1.0@kalender/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:425:in `_run__4401979439353622961__setup__4295356768171603498__callbacks'
~/.rvm/gems/ruby-2.1.0@kalender/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:405:in `__run_callback' …
Run Code Online (Sandbox Code Playgroud)

testing unit-testing minitest ruby-on-rails-3 ruby-2.1

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

是否仍然建议使用Minitest测试Rails 4中的路由?

在Rails 3中,当在MiniTest中编写功能测试时,我养成了测试路由与测试控制器操作分开的习惯.我从Rails指南测试中得到了这个想法- 第9节:测试路径.但是,在将我的应用程序升级到Rails 4之后,我注意到如果我没有为get|patch|post|delete方法提供一组适当的参数,那么控制器动作测试本身已经开始涉及未知路由.

例如,给定路线:

# config/routes.rb
namespace "api" do
  namespace "v2", defaults: { format: :json } do
    resources :users do
      resources :posts do
        resources :comments
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

和功能测试:

# test/controllers/api/v2/comments_controller_test.rb
describe Api::V2::CommentsController
  it "does something" do
    get :index
  end
end
Run Code Online (Sandbox Code Playgroud)

在Rails 3中,上述方法可行.但在Rails 4中,我收到了URL生成错误:

ActionController :: UrlGenerationError:没有路由匹配{:action =>"index",:controller =>"api/v2/comments"}

从这里我可以推断,get当试图找到控制器和动作时,帮助器根本无法匹配路由文件中的路由.很公平.我可以通过更改get调用来解决这个问题,以包含满足嵌套路由所需的参数,如下所示:

# test/controllers/api/v2/comments_controller_test.rb
describe Api::V2::CommentsController
  it "does something" do
    get :index, { user_id: "1", post_id: "1" }
  end
end …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails minitest ruby-on-rails-4

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

Ruby minitest assert_output语法

我是minitest的新手,对红宝石来说仍然是新人,并且真的厌倦了试图谷歌这个问题没有结果.我真的很感激你的帮助:

ruby minitest中assert_output的确切语法是什么?

我在github或其他地方找到的所有内容似乎都使用括号.然而,当我不使用带有assert_output的块时,我收到一条错误消息,这是有意义的,因为此方法的定义包含yield语句.

但无论我尝试什么,我都无法使它发挥作用.

testclass.rb

class TestClass
  def output
    puts 'hey'
  end
end
Run Code Online (Sandbox Code Playgroud)

test_test.rb

require 'minitest/spec'
require 'minitest/autorun'
require_relative 'testclass'


class TestTestClass < MiniTest::Unit::TestCase 
  def setup
    @test = TestClass.new
  end

  def output_produces_output
    assert_output( stdout = 'hey' ) { @test.output}
  end   
end 
Run Code Online (Sandbox Code Playgroud)

我得到的是:

完成测试0.000000s,NaN测试/ s,NaN断言

0次测试,0次断言,0次失败,0次错误,0次跳过

我究竟做错了什么?它必须是一个非常明显的东西,但我无法弄清楚.谢谢你的帮助.

ruby unit-testing assertions minitest

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

Minitest断言未通过检查

每当我尝试assert_equal两个对象时,我总是得到这样的错误:

   No visible difference in the User#inspect output.
   You should look at the implementation of #== on User or its members.
Run Code Online (Sandbox Code Playgroud)

它也发生在Time和Array上.最小的文档也没有真正说明这一点.

我使用的是Ruby 2.0.0,但我使用的是2.2.0,同样的事情发生了.使用最新的minitest.

另外,我正在运行Ubuntu 14.10.

ruby ubuntu minitest

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

如何在Rails中使用'Thread.new'测试代码?

在我的rails应用程序中,注册类具有以下功能,

def register_email
  # Something...
  add_to_other_thread do
    send_verification_email
  end
end

def add_to_other_thread(&block)
  Thread.new do
    yield
    ActiveRecord::Base.connection.close
  end
end
Run Code Online (Sandbox Code Playgroud)

我想用这些进行3次测试.

  1. 测试add_to_other_thread(&blcok):
    在使用某个块调用add_to_other_thread 之后,检查它是否使用适当的块调用Thread.new.
  2. 关于register_email的测试:
    在调用register_email 之后,检查add_to_other_thread(&block)是否得到了正确的阻止.
  3. 在积分测试中:
    用户注册后,检查是否通过其他线程发送了正确的电子邮件(使用ActionMailer :: Base.deliveries).

testing multithreading unit-testing ruby-on-rails minitest

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