Tag: rspec

使用rspec中的传递参数测试rake任务

在rspec中,我想测试一个rake任务,传入一些参数,所以在命令行中你会运行这个: rake commissions:create_price_points options=1,2,3 在rake任务中我使用ENV [‘options’]。 在我的rspec中我有 rake = get_rake_environment(RAKE_FILE) rake[“commissions:create_price_points”].invoke(options=1,2,3) 这运行rake很好,但是这个,以及我用invoke和execute做的其他尝试,都没有将选项传递给它。 只是想知道是否有人对如何做到这一点有任何见解。 谢谢!

Ruby on Rails 3 + Rspec + Capybara:检查响应状态

我从Webrat迁移到Capybara,现在我遇到了很多错误。 例如在webrat中我可以在集成测试中使用它: response.should be_success 但Capybara表明: Failure/Error: response.should be_success NoMethodError: undefined method `success?’ for nil:NilClass 有没有提供这种function的方法? UPD :我的规格: require ‘spec_helper’ describe “Admins” do before(:each) do @admin = FactoryGirl.create(:admin) visit ‘/’ click_link “Login” fill_in “Email”, :with => @admin.email fill_in “Password”, :with => ‘qwerty’ click_button “Sign in” end describe “Admin panel” do it “should have correct links” do […]

Rspec – 引发错误时参数数量错误

所以在我的代码中我有这个方法我试图测试: # checks if a file already exists on S3 def file_exists?(storage_key) begin s3_resource.bucket(@bucket).object(storage_key).exists? rescue Aws::S3::Errors::Forbidden => e false end end 现在我试图制作两个测试用例 – 一个用于文件存在时,一个用于何时不存在。 专注于失败案例。 我想要存根exists? 提出Aws::S3::Errors::Forbidden错误以便file_exists? 方法将返回false。 这是我的测试代码的样子: it “returns false if the file doesn’t already exist” do allow_any_instance_of(Aws::S3::Object).to receive(:exists?).and_raise( Aws::S3::Errors::Forbidden ) expect(instance.file_exists?(‘foo’)).to be false end 运行此测试我看到: wrong number of arguments (given 0, expected […]

使用不带Rails的FactoryGirl,ActiveRecord或任何带RSpec的数据库

我想知道是否有人知道在没有任何上述先决条件的情况下是否可以使用FactoryGirl。 我想用它来为移动和网络甚至可能的API驱动UI自动化测试时生成动态测试数据。 我知道我可以创建一些自定义助手类/方法并使用getter和setter等,但我认为使用这个很棒的小gem会很好。 我搜索得相当广泛,并试图建立一个基本的RSpec项目(我也尝试过Cucumber),但无济于事。 我似乎仍然需要使用相关登录实例化类以便使用它。 FactoryGirl.define do factory :user do firstname { Faker::Name.first_name } lastname { Faker::Name.last_name } age { 1 + rand(100) } end end 然后,如果我尝试在RSpec文件中调用它… describe… it… user = build_stubbed(:user) end end 我还阅读了文档并尝试了所有其他变体,我只是继续… Failure/Error: user = build_stubbed(:user) NameError: uninitialized constant User 这表明我需要一个名为User的类,包含所有逻辑。

Capybara的have_selector有哪些选择?

我在RSpec中遇到了这个错误。 是否有任何针对have_selector文档可以解释选项哈希中的每个键以及它究竟是做什么的? invalid keys :content, should be one of :text, :visible, :between, :count, :maximum, :minimum, :exact, :match, :wait

在RSpec中记录RestClient响应

我有以下规格…… describe “successful POST on /user/create” do it “should redirect to dashboard” do post ‘/user/create’, { :name => “dave”, :email => “dave@dave.com”, :password => “another_pass” } last_response.should be_redirect follow_redirect! last_request.url.should == ‘http://example.org/dave/dashboard’ end end Sinatra应用程序上的post方法使用rest-client调用外部服务。 我需要以某种方式存根其余的客户端调用以发回预设的响应,因此我不必调用实际的HTTP调用。 我的申请代码是…… post ‘/user/create’ do user_name = params[:name] response = RestClient.post(‘http://localhost:1885/api/users/’, params.to_json, :content_type => :json, :accept => :json) if response.code […]

在为ruby运行rspec时如何更改环境变量?

我有几个ruby脚本并用rspec测试它们。 我把我的环境放在一个env.rb文件中(现在)所以我可以在本地访问它们并在生产中将它们放在配置变量中。 但是当我运行rspec时,我想要不同的环境变量。 两个用例: 我运行Twilio,所以我希望能够将用于其测试凭据的SID更改 我将东西作为服务存储在数据库中,并希望拥有一个单独的测试数据库

无法让rspec,spork和调试器发挥出色

Given I am a dumb programmer and I am using rspec and I am using spork and I want to debug …mmm…let’s saaay, a spec for Phone. 然后,我应该在哪里放置“require’ruby-debug’”行以停止在phone_spec.rb中的特定点处理? (所有我要求的是一个很大的箭头,即使是受到挑战的程序员也可以看到:-3) 我尝试了很多地方,除非我没有正确测试它们,否则会发生一些奇怪的事情: 在spec_helper.rb中的以下位置: require ‘rubygems’ require ‘spork’ <= TRIED IT HERE ENV["RAILS_ENV"] ||= 'test' Spork.prefork do require File.dirname(__FILE__) + "/../config/environment" #unless defined?(RAILS_ROOT) require 'spec/autorun' require 'spec/rails' require […]

在RSpecunit testing期间存根地址编码

我正在使用地理编码器 gem为我的一个Active Record模型类添加地理编码function。 这很好用,但我实际上并不希望在unit testing期间触发地理编码。 我已经尝试通过将其添加到我的RSpec测试来删除对地理编码的调用: 之前(:每个)做 User.stub!(:geocode).and_return([1,1])结束 但是,当我运行我的测试时,它仍然似乎在呼唤地理编码。 我究竟做错了什么? 仅供参考,如果我在实例级别存根(例如some_user.stub!而不是User.stub!),这一切都有效。

在RSpec自动化测试期间使Sprockets缓存无效

在我的Rails应用程序中,我有一个.js.erb文件,它有一个变量,可以根据一些Ruby代码动态设置。 var myTimer = ; 该应用程序工作正常,但我在一些自动化测试中遇到问题。 在使用此JavaScript的RSpecfunction测试中会出现此问题。 我的spec文件有许多测试可以动态更改ruby MyApp.config.timeout_time时间来测试不同的场景。 在我的spec文件中,第一个示例通过,其余示例失败。 我终于意识到这种情况正在发生,因为myTimer永远不会在JavaScript方面得到更新。 当第一个测试运行时,JavaScript将使用当前在Ruby中设置的值进行编译。 当我为第二次测试更改Ruby计时器时,RSpec仍在使用JavaScript中的先前值。 有没有办法告诉Sprockets / Rails使文件或缓存的一部分无效,以便重建JavaScript? 我一般不想关闭缓存,我只需要一种方法在需要时基于每个测试使application.js无效。 我可能能够“触摸”文件系统上的一个JavaScript文件,使sprockets认为文件已被更改,但我真的不想这样做。