草庐IT

unit-testing

全部标签

ruby - RSpec:使用线程进行测试

在RSpec中,我有创建新线程的函数,并在该线程内执行一些操作——在我的例子中,调用TCPSocket#readline。这是现在的功能:defreadThread.newdowhileline=@socket.readline#TODO:stuffendendend由于线程调度,如果这样写我的测试会失败:it"readsfromsocket"dosubject.socket.should_receive(:readline)subject.readend目前我知道解决这个问题的唯一方法是使用sleep0.1。有没有办法适本地延迟测试,直到该线程运行? 最佳

ruby - 使用 Rack::Test 和 Sinatra 测试 Controller 实例变量

我有一个Sinatra应用程序,它根据用户是否登录以只读或可编辑的方式提供页面。Controller设置一个变量@can_edit,View使用它来隐藏/显示编辑链接。我如何在测试中测试@can_edit的值?我不知道如何在Rack::Test下获取Controller的当前实例。我使用class_eval来stubController中的logged_in?方法,但我不得不求助于检查last_response.body我的编辑链接以查看是否设置了@can_edit。如何直接测试@can_edit的值? 最佳答案 不幸的是,如果不修

ruby-on-rails - 你如何分解出 RSpec 中常见的 "before(:each)"调用,以便多个规范可以使用它们?

我想分解这堆代码,以便我所有的Controller测试(好吧,几乎所有的)都使用这个before(:each)block:before(:each)do@user=User.newcontroller.stub(:authenticate_user!)controller.stub(:current_user).and_return(@user)controller.stub(:add_secure_model_data)end有什么办法吗?我不想将它包含在所有Controller中......因为有一些不需要它。基本上,每个从SecureController扩展的Controller

ruby - 在 Ruby 中,如何控制 Test::Unit 测试的运行顺序?

例如,当运行这些测试时,我想确保test_fizz总是先运行。require'test/unit'classFooTest更新:我为什么要这样做?我的想法是,某些测试(那些测试更简单、更基本的方法)的早期失败将使跟踪系统中的问题变得更容易。例如,bar的成功取决于fizz是否正常工作。如果fizz坏了,我想马上知道,因为没有必要担心bar,它也会失败,但输出要复杂得多测试结果。 最佳答案 您可以使用Test::Unit::TestCase#test_order=:defined定义测试顺序例子:gem'test-unit'#Iuse

Ruby,如何创建一个 Rack::Request 用于测试目的?

我有一个库,它接受一个Rack::Request并在其上做一些事情。我想通过单元测试而不是功能测试来测试它。所以我必须自己创建一个Rack::Request实例,我该怎么做? 最佳答案 Rack本身包含一些针对Rack::Request的单元测试,您可以将它们用作起点(example)。Rack::Request.new(Rack::MockRequest.env_for("http://example.com:8080/",{"REMOTE_ADDR"=>"10.10.10.10"}))

ruby-on-rails - 是否有必要对 ActiveRecord 验证进行单元测试?

是否有必要对ActiveRecord验证进行单元测试,或者它们已经经过充分测试,因此足够可靠? 最佳答案 验证本身应该是可信的,但您可能想检查验证是否存在。换句话说,测试某样东西的好方法就是把它当作一个黑盒子,从实现中抽象出测试,所以例如你可能有一个测试来检查一个人模型是否在没有它的情况下无法保存一个名字,但不关心Person类如何执行该验证。 关于ruby-on-rails-是否有必要对ActiveRecord验证进行单元测试?,我们在StackOverflow上找到一个类似的问题:

ruby - 为什么 'undefined method ` assert_equal' ' is thrown even after requiring ' test/unit'

我打开irb并输入:require'test/unit'但是当我使用assert_equal方法时,出现以下错误:NoMethodError:undefinedmethod'assert_equal'formain:Object。为什么即使在需要“测试/单元”之后也会发生这种情况? 最佳答案 assert_equal是在Test::Unit::TestCase的子类上定义的,因此仅在该类中可用。您可能会成功地使用includeTest::Unit::TestCase将这些方法加载到当前范围。更有可能的是,您最好将测试写在一个短文件中

ruby - 如何在 Rails TestCases 中显示更长的跟踪

是否有要设置的配置变量,或其他一些方法让RailsActiveSupport::TestCase显示多个跟踪线?否则很难调试。例子:ERRORtest_something(0.73s)SystemStackError:stackleveltoodeep/Users/mario/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.0.9/lib/active_record/connection_adapters/abstract/database_statements.rb:153 最佳答案 看

ruby-on-rails - rails 引擎 : rake routes show its routes but on rspec execution "No route matches" is thrown

我正在尝试测试我的应用程序正在使用的引擎内部的Controller。规范不在引擎中,而是在应用程序本身中(我试图在引擎中进行测试,但也遇到了问题)。我的引擎有以下routes.rb:Revision::Engine.routes.drawdoresources:steps,only:[]docollection{get:first}endend引擎正常挂载在应用routes.rb上:mountRevision::Engine=>"revision"当我运行rakeroutes时,在最后一行我得到:RoutesforRevision::Engine:first_stepsGET/step

ruby - 如何测试 RSpec 中的信号处理,特别是 SIGTERM 的处理?

Heroku可能会出于各种原因向您的应用程序发送SIGTERM,因此我创建了一个处理程序来处理一些清理工作,以防发生这种情况。一些谷歌搜索没有给出任何关于如何在RSpec中测试它的答案或示例。这是基本代码:Signal.trap('TERM')docleanupenddefcleanupputs"doingsomecleanupstuff"...exitend当程序收到SIGTERM时,测试调用此清理方法的最佳方法是什么? 最佳答案 使用Process.kill'TERM',0将信号发送到RSpec并测试调用处理程序。确实,如果信号