Tag: rspec

如何模拟RSpec的login?

我已经和Rails玩了几年了,并且制作了一些正在生产的可移动应用程序。 我一直避免做任何testing,我决定纠正这个问题。 我正在尝试编写一些应用程序的testing,这些应用程序是为已经运行但正在进行不断修订的工作而编写的。 我担心任何更改都会破坏事情,所以我想要进行一些testing并运行。 我已经阅读了RSpec的书,看了一些截屏,但是很难开始(它实际上是你实际完成之后才明白的东西)。 我试图写我的ReportsController应该是一个简单的testing。 我的应用程序的问题是,几乎整个东西都位于身份validation层后面。 如果你没有login,什么都不起作用,所以我必须模拟一个login,甚至可以发出一个简单的获取请求(虽然我想我应该写一些testing,以确保没有login的任何工作 – 我会得到以后)。 我build立了RSpec,Capybara,FactoryGirl和Guard的testing环境(不知道使用Railscasts的build议使用哪些工具)。 到目前为止我写testing的方法是像FactoryGirl那样创build一个用户, FactoryGirl.define do sequence(:email) {|n| "user#{n}@example.com"} sequence(:login) {|n| "user#{n}"} factory :user do email {FactoryGirl.generate :email} login {FactoryGirl.generate :login} password "abc" admin false first_name "Bob" last_name "Bobson" end end 然后像我这样写我的testing; require 'spec_helper' describe ReportsController do describe "GET 'index'" do it "should be successful" do user […]

如何运行一个单一的testing在RSpec警卫?

我使用guard-rspec在我的文件发生变化时自动运行必要的rspectesting,我喜欢它的工作原理。 但是,当我用多个testingdebugging一个文件时,有时我只想要重新运行一个单独的testing。 例如,从命令行使用rspec: rspec spec/requests/my_favorite_spec.rb:100 这将仅运行my_favorite_spec.rb中第100行的单个规范。 我试着把上面的内容input到控制台,但是它只是运行了所有的testing,就像我刚刚按下input一样。 在控制台中是否有另一种语法来运行单个规范?

截断,事务和删除数据库策略之间的区别

使用Rspec时,截断,事务和删除数据库策略有什么区别? 我找不到解释这个的任何资源。 我阅读了数据库清理器的自述文件,但是并没有解释它们各自的作用。 为什么我们必须为水豚使用截断策略? testing时是否必须清理数据库,还是可以禁用它? 我不明白为什么我应该在每个testing用例之后清理我的数据库,难道不会减慢testing吗?

在命名空间模型上使用带Rspec的factory_girl_rails

我有一个networking服务,为多个不同的客户提供广告。 广告的结构因客户而异,因此,我使用客户名称的模型和控制器使用名称空间来区分广告。 从高层来看,看起来像这样: 'app/models/client1/ad.rb' class Client1::Ad < ActiveRecord::Base attr_accessible :title, :description end 'app/models/client2/ad.rb' class Client2::Ad < ActiveRecord::Base attr_accessible :title, :description, :source end 实际上,这些模型更复杂,有联系,但这不是重点。 我正在使用rspec-rails 2.4.0和factory_girl_rails 1.0.1编写一些unit testing,而我所有的工厂都很好。 但是,我无法为名称空间模型定义工厂。 我试过类似的东西: Factory.define :client1_ad, :class => Client1::Ad do |ad| ad.title "software tester" ad.description "Immediate opening" end 和 Factory.define :client2_ad, :class => Client2::Ad do |ad| ad.title "software tester" ad.description […]

RSpec模拟对象示例

我是模仿对象的新手,我正在学习如何在RSpec中使用它们。 有人可以发表一个例子(你好RSpec模拟对象的世界types的例子),或链接(或任何其他参考)如何使用RSpec模拟对象的API?

正确的testing与Rspec“协会”的方式?

我正在尝试testing以下情况: – >我有一个叫Team的模型,当它由用户创build时它才有意义。 因此,每个Team实例必须与用户相关联。 为了testing,我做了以下几点: describe Team do … it "should be associated with a user" do no_user_team = Team.new(:user => nil) no_user_team.should_not be_valid end … end 这迫使我改变团队模型为: class Team < ActiveRecord::Base # Setup accessible (or protected) attributes for your model attr_accessible :name, :user validates_presence_of :name validates_presence_of :user belongs_to :user end 这对你看来是正确的吗? 我只是担心使:用户属性可访问(批量分配)。

如何使用RSpec和Devise / CanCan进行集成testing?

如果我有一个Devise模型用户,其中只有那些angular色:admin的用户才能查看某个url,那么如何编写RSpec集成testing来检查该url的状态是否返回200? def login(user) post user_session_path, :email => user.email, :password => 'password' end 这个问题在这个问题的答案中是伪build议的: 在请求规范中对authentication进行了stubbing ,但是我不能让它和devise一起工作。 CanCan在检查Ability时没有收到一个无用户,这个用户自然没有正确的权限。 在集成规范中没有对控制器的访问权限,所以我不能存根current_user,但我想要做这样的事情。 describe "GET /users" do it "should be able to get" do clear_users_and_add_admin #does what it says… login(admin) get users_path response.status.should be(200) end end 注意!!! :自问题提出以来所有这一切都改变了。 目前最好的方法是: http : //github.com/plataformatec/devise/wiki/How-To : -Test-with-Capybara

我如何validationRSpec中的退出和中止?

我正在尝试规范我的脚本收到的命令行参数的行为,以确保所有的validation通过。 我的一些命令行参数会导致abort或exit被调用,因为提供的参数丢失或不正确。 我正在尝试这样的不工作: # something_spec.rb require 'something' describe Something do before do Kernel.stub!(:exit) end it "should exit cleanly when -h is used" do s = Something.new Kernel.should_receive(:exit) s.process_arguments(["-h"]) end end exit方法是干净地射击防止RSpecvalidationtesting(我得到“SystemExit:退出”)。 我也试图mock(Kernel)但也没有工作,因为我想(我没有看到任何可辨别的差异,但这可能是因为我不知道如何嘲笑内核,并确保嘲笑的内核在我的Something类中使用)。

在Rspec中testingSTDOUT输出

我正在试图为这个声明build立一个规范。 用'puts'很容易, print "'#{@file}' doesn't exist: Create Empty File (y/n)?"

如何使用RSpectesting渲染部分

我想根据一些条件testing渲染一个特定的部分。 例如,在模型显示动作视图show.html.erb我有: <% if condition1 %> <%= render :partial => "partial1" %> <% else %> <%= render :partial => "partial1" %> <% end %> 我试过了: response.should render_template("partial_name") 但它告诉它呈现“显示”模板 期望<“partial1”>但使用<“model / show,layouts / application”>进行渲染 我做错了什么?