Tag: rspec

Rails 3.1插件gem,虚拟testing应用程序,rspec

所以Rails 3.1带有一个不为人知的方便的“rails g插件新”生成器,它为您提供了一个适合rails gem插件的框架。 [http://guides.rubyonrails.org/plugins.html#or-generate-a-gemified-plugin] 这样做的一个有用的东西是设置方便的Test :: Unittesting。 它为您提供了一个基本的虚拟Rails应用程序,您的testing可以在上下文中运行,以testing仅在Rails应用程序的副本中运行的“引擎”行为。 (它把它放在./test/dummy)。 但是你的testing仍然在my_gem / test中,testing不会在虚拟应用中。 而且,my_gem / test / test_helper.rb在那里写,这样testing将在虚拟应用程序的上下文中运行,在../dummy/config/environment处引导。 我之所以这样描述,是因为我认为很多人不知道这个新的发电机,这个发电机的设置非常好。 但是我的问题是,有没有人想出如何用rspec来做到这一点呢? 我试图遵循相同的原则DIY来设置这样的事情,在一个轨道插件gemrspec,但我遇到了各种混乱的路障,并希望也许别人已经find了它(或将有兴趣计算它为了我们其他人,嘿)。

如何在运行rspec时将Rails.logger打印到控制台/标准输出?

与标题相同:如何在运行rspec时将Rails.logger打印到控制台/ stdout? 例如。 Rails.logger.info "I WANT this to go to console/stdout when rspec is running" puts "Like how the puts function works" 我仍然希望Rails.logger也去log/test.log 。

Rails 3.2,RSpec,Factory Girl:NameError:未初始化的常量Factory

我一直在跟随这个入门到Railstesting,我遇到了一个问题,我似乎无法find解决scheme。 我对Rails非常熟悉,但是这是我第一次进入testing阶段。 无论如何,我有一个非常基本的模型testing,甚至没有完全实现,当我尝试运行rspec spec/models/admin_spec.rb 。 我在Admin has a valid factory行(下面的完整代码)中出现以下错误: Admin has a valid factory Failure/Error: Factory.create(:admin).should be_valid NameError: uninitialized constant Factory # ./spec/models/admin_spec.rb:6:in `block (2 levels) in <top (required)>' 我假设FactoryGirl没有被加载出于某种原因,但我觉得它应该被自动加载。 以下是我的Gemfile中的完整代码:/spec/models/admin_spec.rb和/spec/factories/admins.rb 非常感谢您的帮助 的Gemfile source 'https://rubygems.org' gem 'rails', '3.2.2' gem 'mysql2' gem 'jquery-rails' gem 'haml' gem 'bcrypt-ruby', :require => 'bcrypt' gem 'bootstrap-sass', '~> 2.0.2' gem […]

testing:如何把注意力放在行为上而不是在不失速的情况下实现?

看来,有两种完全不同的testing方法,我想引用他们两个。 问题是,这些意见是在5年前(2007年)提出的,我对此感兴趣,自那以后发生了什么变化,我该走哪条路。 布兰登老板 : 理论是testing应该是不可知的实现。 这导致testing不太脆,实际testing结果(或行为)。 对于RSpec,我觉得完全模拟你的模型来testing你的控制器最终会迫使你过多地考虑你的控制器的实现。 这本身并不是太糟糕,但问题在于,它太多地进入控制器,以决定如何使用模型。 为什么我的控制器会调用Thing.new? 如果我的控制器决定采取Thing.create怎么办! 和救援路线? 如果我的模型有一个特殊的初始化方法,如Thing.build_with_foo? 我的行为规范不应该失败,如果我改变实施。 当你有嵌套的资源并且为每个控制器创build多个模型时,这个问题变得更糟。 我的一些设置方法最终是15行或更长的行,非常脆弱。 RSpec的目的是将你的控制器逻辑从你的模型中完全隔离出来,这在理论上听起来不错,但是几乎和Rails这样的集成堆栈运行在一起。 特别是如果你练习瘦身控制器/胖模型的规则,控制器中的逻辑数量变得非常小,并且设置变得巨大。 那么什么是BDD想要做的? 退一步说,我真正想testing的行为不是我的控制器调用Thing.new,而是给定参数X,它创build一个新的东西并redirect到它。 大卫Chelimsky: 这全是关于权衡。 ARselectinheritance而不是授权的事实使我们处于testing的束缚之中 – 我们必须将其与数据库耦合起来,否则我们必须更加贴近实施。 我们接受这种deviseselect,因为我们从performance力和干爽中获得好处。 为了应对困境,我select了更快速的testing,代价是稍微更脆弱。 你select较脆弱的testing,代价是稍微慢一些。 这是一个折中的方法。 在实践中,我每天运行数百次,甚至数千次(我使用自动testing并采取非常细化的步骤),并且改变我是否几乎从不使用“新build”或“创build”。 同样由于细化的步骤,出现的新模型起初非常不稳定。 valid_thing_attrs方法最大限度地减less了这一点的痛苦,但它仍然意味着每个新的必需字段意味着我必须更改valid_thing_attrs。 但如果你的方法在实践中为你工作,那么它的好! 事实上,我强烈build议你发布一个插件,用你喜欢它们的方式生成例子。 我相信很多人会从中受益。 瑞安·贝茨 : 出于好奇,你在testing/规格中多久使用mock? 也许我做错了什么,但我觉得这是严重的限制。 从一个月前转换到rSpec,我一直在做他们推荐的文档,控制器和视图层根本没有碰到数据库,模型被完全嘲弄了。 这给你一个很好的速度提升,使一些事情更容易,但我发现这样做的弊端远远超过专业人士。 自从使用mock之后,我的规格变成了维护噩梦。 规范是为了testing行为,而不是实现。 我不在乎一个方法是否被调用,我只是想确保输出结果是正确的。 因为嘲讽使得规范对实现有挑剔,所以不必经常返回并“修复”规范就可以做简单的重构(不会改变行为)。 我非常想知道一个规范/testing应该包括什么。 只有当应用程序中断时,testing才会中断。 这是为什么我很难testing视图层的一个原因,因为我觉得它太僵硬了。 在视图中更改小的东西时,通常会导致testing中断,而不会中断应用程序。 我发现与嘲笑相同的问题。 最重要的是,我今天才意识到,嘲笑/扼杀类方法(有时)在规范之间。 规格应该是自包含的,不受其他规格的影响。 这打破了这个规则,并导致了棘手的错误。 我从这些中学到了什么? 小心你使用嘲笑。 存根并不坏,但仍然有一些相同的问题。 […]

对于Rspec的“should_receive”,是否有一个较less侵入的select?

在编写Rspectesting时,我经常为should_receive感到沮丧。 我想知道是否有一个不太干扰的select。 例如: describe "making a cake" do it "should use some other methods" do @baker.should_receive(:make_batter) @baker.make_cake end end 对should_receive的调用是一个很好的描述,但是它破坏了我的代码,因为should_receive通过掩盖原始方法来工作, make_cake不能继续,除非make_batter实际返回一些连击。 所以我改变它: @baker.should_receive(:make_batter).and_return(@batter) 这是丑陋的,因为: 它看起来像我testingmake_batter正确地返回@batter ,但我实际上是迫使伪造的版本make_batter返回。 它迫使我分别设置@batter 如果make_batter有任何重要的副作用(这可能是一种代码味道,我想),我也必须做到这一点。 我希望should_receive(:make_batter)将validation方法调用并将其传递给原始方法 。 如果我想将它的行为存储为更好的隔离性testing,我会明确地这样做: @baker.stub(:make_batter).and_return(@batter) 。 有没有办法做一些像should_receive而不阻止原始方法调用? 我的问题是不良devise的症状吗?

使用RSpectesting哈希内容

我有这样的testing: it "should not indicate backwards jumps if the checker position is not a king" do board = Board.new game_board = board.create_test_board board.add_checker(game_board, :red, 3, 3) x_coord = 3 y_coord = 3 jump_locations = {} jump_locations["upper_left"] = true jump_locations["upper_right"] = false jump_locations["lower_left"] = false jump_locations["lower_right"] = true adjusted_jump_locations = @bs.adjust_jump_locations_if_not_king(game_board, x_coord, y_coord, jump_locations) adjusted_jump_locations["upper_left"].should == […]

如何模仿与水豚鼠标hover

基本上,我试图做的是点击一个button,变得可见时,hover另一个元素(其父)。 我试图在隐藏button的父级上使用trigger.('mouseover') ,但这似乎不起作用。 这是来自spec的代码片段: # label[for … ] -> the parent element page.execute_script("$('label[for=\"department_#{department.id}\"]').trigger(\"mouseover\")") # le hidden button find(".actions").click # some <li> on a list that drops down when clicking the hidden button click_on("Edit department") 而错误… Failure/Error: click_on("Edit department") Selenium::WebDriver::Error::ElementNotVisibleError: Element is not currently visible and so may not be interacted with 我想知道如何使页面上的.actionsbutton可见,以便之后点击它。 任何帮助将非常感激。

RubyTest在崇高的文字2

我想让RubyTest在Sublime Text 2中工作。我按照Github自述文件中的说明操作,得到以下错误。 有谁知道我可以解决这个问题? /bin/sh: rspec: command not found

Rails / Rspec – 在控制器中testingredirect

所以我目前正在写一个控制器在现有的控制器testing,只是没有一个之前。 我想testing的是一个redirect,当有人不允许编辑某个人或允许编辑某人的时候发生。 控制器操作正在编辑 def edit if !@scorecard.reviewed? || admin? @company = @scorecard.company @custom_css_include = "confirmation_page" else redirect_to :back end end 所以如果一个记分卡已被审查,那么只有一个pipe理员可以编辑该分数。 该控制器的路线.. # scorecards resources :scorecards do member do get 'report' end resources :inaccuracy_reports, :only => [:new, :create] end 最后是testing require 'spec_helper' describe ScorecardsController do describe "GET edit" do before(:each) do @agency = Factory(:agency) @va […]

完整的rails json API示例与Rspectesting

我正在寻找一个实现了JSON API的Rails 3项目的好例子库,并且包含了RSpectesting。 一个完整的教程将是伟大的,但我会解决只是一个很好的评论的例子。