Tag: 测试

在轨道上测试ruby路线的位置

在轨道上测试ruby路线的位置? unit testing? function测试? 集成测试? 加成: 确切地说,在哪里应用指南和api上描述的断言?

测试JSON客户端 – 服务器API的推荐方法是什么?

编辑#2:有没有人有一个很好的方法来测试客户端 – 服务器应用程序的“中间”,我们可以拦截请求和响应,根据需要伪造客户端或服务器,并提供api的自我文档? 在许多情况下,黄瓜可能是一个很好的解决方案,但它并不是我想要的。 而这个中间层应该是客户端/服务器实现不可知的。 (例如,黑盒子)。 我们的客户端 – 服务器模型是带有Flex客户端的ruby-on-rails服务器,使用带有JSON作为数据格式的RESTish接口。 因此,客户端发布到服务器的任何内容通常都是单个JSON参数。 服务器做它的事情并用纯JSON模型响应。 我们在服务器上进行了标准的rails测试,我们正在努力在客户端上完成正确的FlexUnit测试(它是一个移动的目标)。 但是,我的团队对当前测试模型的有效性存在争议,因为服务器上的每个更改似乎都会破坏API的一部分。 这告诉我,API通信存在问题(团队成员之间,代码中的自我文档等),以及缺乏正确的API健全性测试。 所以我一直在质疑我们是否需要一个模拟客户端来测试纯JSON级别的服务器(没有富客户端的所有其他复杂性),并且可能是一个模拟服务器用于与富客户端做同样的事情。 这有两个目的,即记录API并提供对API本身的更全面的测试。 有争议的原因是rails人员声称rails集成测试足以测试所有服务器请求,而中间测试环境只是多余的。 所以这里的问题是,鉴于我们的情况,应该如何自我记录API,以及我们应该如何测试API本身? 编辑: 我们有像/foo/444/bar.js这样的路由,但参数实际上可以是任何复杂的JSON字符串,具体取决于操作,例如: json={ “foo”:{ “x”:1, “y”:2 }, “bar”:[1,2,3,4,5] } 但除了手动编辑的API文档外,没有自我文档。 rails控制器通常只是反序列化并将更改直接应用于模型。 很高兴有一些常见的测试来告诉我们什么时候改变, 以及预期的结果。

Rails和MiniTest:添加其他文件夹

我使用Ruby 2和Rails 4.我有一个文件夹test/lib ,其中有一些测试。 但是运行rake test不会使用它们。 只有其他测试(型号,控制器……)正在运行。 我在哪里添加lib文件夹? 我已经尝试过MiniTest::Rails::Testing.default_tasks << 'lib' ,但我得到NameError Exception: uninitialized constant MiniTest::Rails 。 我没有将minitest gem添加到我的Gemfile中,因为Ruby 2默认使用它。

使用Rspec测试“Post create”

我正在尝试用Rspec测试“Post create”动作。 代码如下: def valid_attributes { :zone => Flymgr::Zone.new(:countries => Flymgr::ZoneCountry.first, :name => ‘USA’, :description => ‘USA Flight’, :zipcodes => ”), :price => ‘100.00’, :class => ‘first’, } end def valid_session {} end before(:each) do @request.env[“devise.mapping”] = Devise.mappings[:admin] admin = FactoryGirl.create(:admin) sign_in admin end describe “POST create” do describe “with valid params” do it “creates […]

Capybara – 提交没有按钮的表格

我试图提交一个没有按钮的表单只使用Capybara和Rspec(没有Cucumber或Selenium,我知道已经存在一个问题)。 我已经看到有一个要点是添加一个方法来提交没有按钮的表单: module SubmitRackTestFormWithoutButton def submit_form! Capybara::RackTest::Form.new(driver, form).submit({}) end end Capybara::RackTest::Node.send :include, SubmitRackTestFormWithoutButton https://gist.github.com/989533 ,但我没有让它工作,我对它发表了评论: 我得到未定义的方法`submit_form!’ for #Capybara :: Node :: Element:…实际上是通过“Capybara :: RackTest :: Node.send:include,SubmitRackTestFormWithoutButton”方法submit_form! 添加到节点(而不是元素),但找到返回元素 您是否有一些想法可以解决这个问题,或者其他解决方案来提交没有按钮的表单? 谢谢

在rails集成规范中向同一个控制器发出两个请求

我在使用rspec在rails集成测试中向同一个url发出两个请求时遇到问题 it ‘does something’ do # get ‘/something’, {:status=>’any_other’}, @header ## <<<<‘ok’}, @header doc = Nokogiri::HTML(response.body) lis = doc.css(‘#the_id’) lis.size.should == 1 lis[0].text.should include(‘anything’) end 如果我向同一个控制器发出两个请求,那么测试似乎保持旧响应…… 在上面的示例中,如果我取消注释该行,则测试会中断,因为它会保留第一个“查询”的结果 它是测试堆栈的限制,还是我做错了什么?

为库模块添加rspec测试似乎并没有提升Expectations和Matchers

我正在为我的应用添加更多的rspec测试,并希望测试一个ScoringMethods模块,它位于/lib/scoring_methods.rb中。 所以我添加了一个/ spec / lib目录并在那里添加了scoring_methods_spec.rb。 我需要spec_helper并设置describe块,如下所示: require File.expand_path(File.dirname(__FILE__) + ‘/../spec_helper’) describe ScoringMethods do describe “should have scorePublicContest method” do methods = ScoringMethods.instance_methods methods[0].should match(/scorePublicContest/) end end 现在, methods[0]是一个String,并且公共方法名称与正则表达式匹配没有问题。 而“spec_helper”的相对路径是正确的。 问题是整个设置似乎没有使用rspec库。 运行示例产生: ./spec/lib/scoring_methods_spec.rb:7: undefined method `match’ for Spec::Rails::Example::RailsExampleGroup::Subclass_1::Subclass_1:Class (NoMethodError) … 似乎缺少整个期望和匹配支持。 为了测试我的假设,我通过将“is_instance_of”替换为“is_foobar_of”来更改了工作助手规范。 该测试完全失败,并说“is_foobar_of”不是目标对象的方法; 它,整个Spec :: Rails :: Example …层次结构不存在。 我也尝试过使用其他匹配器。 我试过“be_instance_of”和其他一些人。 好像我没有正确地包含rspec库。 最后,ScoringMethods是一个模块,就像Helpers是模块一样。 所以我认为可以测试模块(而不是像控制器和模型这样的类)。 我非常感谢你对我做错了什么的想法。 也许有更有效的方法来测试库模块? […]

不需要的符号来转换哈希键的字符串

当我在我的控制器中分配时 @my_hash = { :my_key => :my_value } 并通过执行测试该控制器 get ‘index’ assigns(:my_hash).should == { :my_key => :my_value } 然后我收到以下错误消息: expected: {:my_key=>:my_value}, got: {“my_key”=>:my_value} (using ==) 为什么这种自动符号转换为字符串? 为什么它会影响哈希的键?

使用rspec最佳实践进行Rails视图/控制器测试

对于控制器测试,Rails建议检查HTTP响应,身份validation,分配,会话和Flash消息等内容。 但是在我现在正在使用的应用程序中,我看到很多带有response.body.should has_tag()的Rspec测试,据我所知,它最适合于视图测试。 我想知道的是: 这种不理想的测试方式是否有相当大的性能/其他类型的惩罚?

SimpleCov有多个应用程序 – 或者简而言之,Simplecov如何工作?

我正在尝试设置SimpleCov为3个应用程序生成报告,这些应用程序从本地gem共享大部分代码(模型,控制器),但每个应用程序使用的代码规范都在每个./spec内部,而不是在gem本身。 更清楚的例子。 当我在app_1中运行bundle exec rspec spec时,它使用本地gem中的共享模型,我想得到(准确)报告这个app_1里面的所有规格./spec。 本地gem还有一些专门用于app_2的模型,在命名空间内,所以当我在app_1中运行测试套件时,我想跳过这些文件的报告。 我正在尝试通过app_1 / spec / spec_helper中的以下代码实现此目的。 # This couple of lines are needed to generate report for the models, etc. inside the local gem. SimpleCov.adapters.delete(:root_filter) SimpleCov.filters.clear SimpleCov.adapters.define ‘my_filter’ do root = SimpleCov.root.split(“/”) root.pop add_filter do |src| !(src.filename =~ /^#{root.join(“/”)}/) end add_filter “/app_2_namespace/” end if ENV[“COVERAGE”] == “true” SimpleCov.start ‘rails’ […]