使用时,我的功能测试中出现错误assert_equal:
1) [31mFailure[0m:
test_should_allow_dealer_to_extend_offer:21
<Thu, 14 Apr 2011 23:59:59 PDT -07:00> expected but was
<Thu, 14 Apr 2011 23:59:59 PDT -07:00>.
Run Code Online (Sandbox Code Playgroud)
请注意,两者显示相同的时间和时区.我检查了它们是同一类类型(ActiveSupport :: TimeWithZone).那他们为什么不平等呢?
它是数据库中的标准DateTime字段,我认为它只存储到第二个右边?
我可以通过将它们转换为整数或使用assert_in_delta1分钟的范围来通过它.但只是想知道.
顺便说一下这是Rails 2.3.8和MySQL.
有很多关于如何使用Capybara/Selenium/Rspec执行javascript测试的示例,您可以在其中编写如下测试:
it "does something", :js => true do
...
end
Run Code Online (Sandbox Code Playgroud)
但是,对于minitest,您无法传递第二个参数来指示selenium执行测试.
有没有人对如何做到这一点有任何想法?
是否有从RSpec 2迁移到的策略或一系列步骤MiniTest::Spec?我想看看为一个大型项目做这个,但我不知道从哪里开始.
我知道.这是不鼓励的.由于我不会进入的原因,我需要按照它们编写的顺序运行我的测试.根据文档,如果我的测试类(我们称之为TestClass)扩展Minitest :: Unit :: TestCase,那么我应该能够调用公共方法i_suck_and_my_tests_are_order_dependent!(Gee - 你认为创建Minitest的人有意见吗?在那一个?).此外,还可以选择调用被调用的方法test_order并指定:alpha覆盖其默认行为:random.这些都不适合我.
这是一个例子:
class TestClass < Minitest::Unit::TestCase
#override random test run ordering
i_suck_and_my_tests_are_order_dependent!
def setup
...setup code
end
def teardown
...teardown code
end
def test_1
test_1 code....
assert(stuff to assert here, etc...)
puts 'test_1'
end
def test_2
test_2_code
assert(stuff to assert here, etc...)
puts 'test_2'
end
end
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我得到:
undefined method `i_suck_and_my_tests_are_order_dependent!' for TestClass:Class (NoMethodError)
Run Code Online (Sandbox Code Playgroud)
如果我用i_suck顶部的方法替换方法调用a la:
def test_order
:alpha
end
Run Code Online (Sandbox Code Playgroud)
我的测试运行,但我可以从puts每个方法告诉我每次运行测试时事物仍以随机顺序运行.
有谁知道我做错了什么?谢谢.
是否可以通过rake任务让minitest只运行失败的测试?
无法在互联网上找到任何关于这个...用rspec或黄瓜它工作..这里有可能吗?
我想使用Minitest(minitest-rails)来测试一个辅助方法- 但是辅助方法依赖于current_user一个可用于控制器和视图的Devise辅助方法.
应用程序/佣工/ application_helper.rb
def user_is_admin? # want to test
current_user && current_user.admin?
end
Run Code Online (Sandbox Code Playgroud)
测试/助理/ application_helper_test.rb
require 'test_helper'
class ApplicationHelperTest < ActionView::TestCase
test 'user is admin method' do
assert user_is_admin? # but current_user is undefined
end
end
Run Code Online (Sandbox Code Playgroud)
请注意,我能够测试不依赖的其他帮助方法current_user.
我使用Ruby 1.9.2(ruby -v产量:ruby 1.9.2p290(2011-07-09修订版32553)[x86_64-linux]),我试图让它工作:
require 'test/unit'
class TestStartup < Test::Unit::TestCase
def self.startup
puts "startup"
end
def test1
puts "in test1"
end
end
Run Code Online (Sandbox Code Playgroud)
当我跑的时候,我明白了
Loaded suite test_startup
Started
in test1
.
Finished in 0.000395 seconds.
1 tests, 0 assertions, 0 failures, 0 errors, 0 skips
Run Code Online (Sandbox Code Playgroud)
我很难找到关于这个功能的文档,除了SO上的零散帖子等.
是的,我想使用此功能而不是设置.
TIA
每当Rails生成器运行一个或多个选项时,最薄的提升OptionParse::InvalidOption.
我使用的是Rails 3.1,Ruby 1.9.2-p290和Mintest 2.10.0.
generate命令实际上将运行并处理传递的选项,但Minitest会在最后引发异常和堆栈跟踪:
rails generate model x --no-migration -s -p
invoke active_record
identical app/models/x.rb
invoke test_unit
identical test/unit/x_test.rb
identical test/fixtures/xs.yml
/Users/max/.rvm/gems/ruby-1.9.2-p290/gems/minitest-2.10.0/lib/minitest/unit.rb:900:in 'block in process_args': invalid option: --no-migration (OptionParser::InvalidOption)
from /Users/max/.rvm/gems/ruby-1.9.2-p290/gems/minitest-2.10.0/lib/minitest/unit.rb:879:in 'new'
from /Users/max/.rvm/gems/ruby-1.9.2-p290/gems/minitest-2.10.0/lib/minitest/unit.rb:879:in 'process_args'
from /Users/max/.rvm/gems/ruby-1.9.2-p290/gems/minitest-2.10.0/lib/minitest/unit.rb:929:in '_run'
from /Users/max/.rvm/gems/ruby-1.9.2-p290/gems/minitest-2.10.0/lib/minitest/unit.rb:922:in 'run'
from /Users/max/.rvm/gems/ruby-1.9.2-p290/gems/minitest-2.10.0/lib/minitest/unit.rb:690:in 'block in autorun'
Run Code Online (Sandbox Code Playgroud)
还有其他人遇到过这个吗?
我的测试中有一条线:
page.has_reply?("my reply").must_equal true
Run Code Online (Sandbox Code Playgroud)
并使其更具可读性我想使用自定义匹配器:
page.must_have_reply "my reply"
Run Code Online (Sandbox Code Playgroud)
基于https://github.com/zenspider/minitest-matchers的文档,我希望我需要编写一个类似于以下内容的匹配器:
def have_reply(text)
subject.has_css?('.comment_body', :text => text)
end
MiniTest::Unit::TestCase.register_matcher :have_reply, :have_reply
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)