~/Sites/sample_app$ rails test
Running via Spring preloader in process 24338
Run options: --seed 58780
Running:
..
Finished in 0.292172s, 6.8453 runs/s, 6.8453 assertions/s.
/var/lib/gems/2.3.0/gems/railties-5.1.0/lib/rails/test_unit/minitest_plugin.rb:9:in `aggregated_results': wrong number of arguments (given 1, expected 0) (ArgumentError)
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我会收到这个错误.我似乎找不到任何有这个特定错误的人.我正在按照教程https://www.railstutorial.org/book/static_pages.此错误遵循rails test命令.如果有帮助,运行Ubuntu和rails 5.1.我没有传递任何参数,所以我不明白为什么我会收到这个错误.
我的测试文件如下:
require 'test_helper'
class StaticPagesControllerTest < ActionDispatch::IntegrationTest
test "should get home" do
get static_pages_home_url
assert_response :success
end
test "should get help" do
get static_pages_help_url
assert_response :success
end
Run Code Online (Sandbox Code Playgroud) 我使用Minitest作为我的功能测试的跑步者,使用Selenium作为运行浏览器的驱动程序.每个测试都建模为MiniTest :: Unit :: TestCase.
Minitest报告完成执行所有测试后的执行摘要.遇到的异常也会在执行结束时打印出来.当发现执行上下文丢失时,我发现很难调试意外失败.我遇到的例外不是确定性的.
有没有办法让Minitest运行器停止执行异常或断言失败的测试?
我使用的是minitest(2.11.2)和ruby 1.9.2p290(2011-07-09)[i386-mingw32]
我正在使用典型工厂测试典型的Rails模型:
# My model uses a 3-letter uppercase airport code,
# such as "ATL" for Atlanta, "BOS" for Boston, etc.
class Airport < ActiveRecord::Base
validates :code, uniqueness: true
Factory.define :airport do |f|
f.code { random_airport_code } # Get a 3-letter uppercase code
Run Code Online (Sandbox Code Playgroud)
我正在添加更多测试并开始在机场代码中看到碰撞:例如工厂创建一个代码为"XYZ"的机场,然后工厂的后续调用尝试创建具有相同代码的机场.
序列是解决这个问题的一种方法.例如,使用Factory Girl序列,有序列表或预先计算的枚举,一些类似的方式来维护下一个可用代码的状态.
我的问题是:什么是非序列方法来解决这个问题?我想使用随机数据,而不是序列.
我正在尝试的一些想法因为它们是务实的 - 对这些的任何见解都非常感激.
while
airport = Factory.build :airport
airport.save && return airport
end
Run Code Online (Sandbox Code Playgroud)
优点:实践快速,因为碰撞很少见; 当地的州.
缺点:笨拙的语法; 非本地工厂; 由于碰撞以外的原因,保存可能会失败.
Airport.transaction
while
x = random_airport_code
if Airport.exists?(code: x)
next
else
Factory :airport, …Run Code Online (Sandbox Code Playgroud) 我正在使用带有Ruby 1.9.3的minitest版本如何测试模拟的多个调用?我需要类似的东西
mockObject.expect.times(2) :method, [return_1 first time, return_2 second time]
mockObject.verify
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这个目标?
Minitest的规范库很棒.我已经能够在Rails单元测试中使用它没问题.但是,Rails功能测试继承自ActionController :: TestCase,它在其设置中提供了像@controller这样的实例变量.
有没有人使用Minitest :: Spec lib进行Rails功能测试?
如果没有,我正在考虑创建一个小型库来做到这一点.我对rspec并不太热衷,并且应该开始将它的重点转移到rspec上.拥有一些轻量级的东西并且基于已经提供的工具构建它会很不错.
已经看过这个问题了,或多或少反映了我目前运行整个套件的方式.
另外,我设置了以下rake任务:
Rake::TestTask.new do |t|
t.name = "spec:models"
t.libs << "test"
t.pattern = "spec/models/*_spec.rb"
end
Run Code Online (Sandbox Code Playgroud)
但是当我使用time rake spec:models它时,我注意到它在大约2.36秒内完成.如果我在该目录中运行所有单独的测试ruby /path/to/spec.rb(目前所有测试都与ActiveRecord隔离 - 没有持久性,那么超快),他们的累计总用户时间是2.36秒,但我也注意到每个文件占用0.4用户从开始到结束执行的秒数,MiniTest报告的实际"测试"时间要快得多(这样我的整个套件在加载依赖后,应该在不到0.15秒的时间内执行,而不是2.36秒).
示例(对于一个spec文件):
Started
11/11: 100% |======================================| Time: 00:00:00
Finished in 0.02223s
11 tests, 15 assertions, 0 failures, 0 errors, 0 skips
ruby path/to/spec.rb 0.43s user 0.06s system 88% cpu 0.559 total
Run Code Online (Sandbox Code Playgroud)
我怀疑Rake正在每次测试的执行之间重新加载库,这就是额外的时间.无论如何我可以验证这一点,或者在不使用Rake的情况下运行我的整个套件?
顺便说一句,当我之前说"用户时间"时,我指的是通过time在我的ruby命令之前输出的第一个数字来运行单个测试文件,所以time ruby /path/to/spec.rb=ruby path/to/spec.rb 0.43s user 0.06s system 88% cpu 0.559 total
考虑将Minitest用于现有的Rails 3.2.我试图了解minitest-rails和minitest-spec-rails之间的区别.
是否有类似于RSpec for test :: Unit测试中的shared_examples的插件/扩展名?
我开始MiniTest在我的Rails项目中使用.
当我跑步时spring rake test,测试工作正常.但我无法通过测试guard-minitest.
bundle exec guard
05:03:24 - INFO - Guard::Minitest 2.4.6 is running, with Minitest::Unit 5.9.0!
05:03:24 - INFO - Running: all tests
Run options: -n spec/apis/user_spec.rb --seed 22566
# Running:
Finished in 0.004998s, 0.0000 runs/s, 0.0000 assertions/s.
0 runs, 0 assertions, 0 failures, 0 errors, 0 skips
05:03:25 - INFO - Guard is now watching at '/Users/ironsand/dev/my_project'
Run Code Online (Sandbox Code Playgroud)
guard :minitest, spring: 'spring rake test' do
watch(%r{^test/models/company_test.rb$})
watch(%r{^test/(.*)\/?test_(.*)\.rb$})
watch(%r{^lib/(.*/)?([^/]+)\.rb$}) { |m| "test/#{m[1]}test_#{m[2]}.rb" …Run Code Online (Sandbox Code Playgroud) 我一直在为此而奋斗.我希望能够覆盖特征之上的属性.我一直在阅读文档和一些互联网示例,但我无法让它工作.
这就是我想要做的事情:
test "..." do
#overwrite start_time
middle = create( :basic_instant_instance, start: 1.hours.ago)
end
FactoryGirl.define do
factory :instant_instance do
trait :active_now do
#attributes...
transient do
start nil
end
#overwrite start_time
start_time start.present? ? start : Time.now
end
factory :basic_instant_instance, traits: [:active_now]
end
Run Code Online (Sandbox Code Playgroud)
我一直在:
ArgumentError:特征未注册:开始