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) 我找到了配置Rails以使用Minitest的资源.遗憾的是,大多数资源都假设Minitest Spec适用于所有测试类型,或者在最好的情况下,至少用于集成测试.
我可能是"复古",但我觉得断言是一个测试:单位工作对我来说比rspec风格更好.我将使用MiniTest :: Unit声明样式与Capybara一起运行集成测试.
我有兴趣看到minitest_helper.rb和some_model_integration_test.rb的示例,以了解我需要采用的相关配置元素,以使集成测试与Capybara完美配合.
有人可以解释如何为此配置Rails吗?
我正在测试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) 我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) 我正在尝试使用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语法相关的内容吗?
在我的Rails应用程序中,我已经将Ruby更新1.9.3为2.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) 在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) 我是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次跳过
我究竟做错了什么?它必须是一个非常明显的东西,但我无法弄清楚.谢谢你的帮助.
每当我尝试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.
在我的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次测试.
minitest ×10
ruby ×7
unit-testing ×4
testing ×2
assertions ×1
capybara ×1
dsl ×1
omniauth ×1
ruby-2.1 ×1
ubuntu ×1