Tag: rspec rails

如何在控制器规范中禁用before_action?

我在我的控制器规范中使用了这个: controller.class.skip_before_action 具体来说,在这种情况下: controller.class.skip_before_action:require_authorisation_to_view_materials MaterialsController: class MaterialsController < ApplicationController before_action :set_material, only: [:show, :edit, :update, :destroy] before_action :require_authorisation_to_view_materials, only: [:index, :show] def require_authorisation_to_view_materials # For Materials Page unless user_signed_in? && current_user.can_view_materials? redirect_to root_path, alert: "You are not authorised to view the Materials page." end end # GET /materials # GET /materials.json def index @materials = […]

测试has_many与RSpec的关联

我正在尝试使用RSpec测试Hour模型,即类似于范围的类方法’find_days_with_no_hours’。 业务有多个与STI相关的小时数。 需要通过Business对象调用find_days_with_no_hours,我无法弄清楚如何在RSpec测试中设置它。 我希望能够测试类似的东西: bh = @business.hours.find_days_with_no_hours bh.length.should == 2 我尝试了各种方法,比如创建一个Business对象(比如说Business.create),然后设置@ business.hours << mock_model(BusinessHour,…,…,…)但是没有工作。 这通常是怎么做的? class Business :hourable end class Hour true def self.find_days_with_no_hours where(“start_time IS NULL”) end end

Rspec:在路由规范中添加一些头请求

我正在开发一个Rails应用程序,它具有JSON格式的REST API并且版本化(根据这个优秀的Ryan演员: http : //railscasts.com/episodes/350-rest-api-versioning )。 例如,有一个spec / requests规范: require ‘spec_helper’ describe “My Friends” do describe “GET /my/friends.json” do it “should get my_friends_path” do get v1_my_friends_path, {}, {‘HTTP_ACCEPT’ => ‘application/vnd.myapp+json; level=1’} response.status.should be(401) end end end 它运作良好。 但是(保持这个例子)我们如何编写路由规范? 例如,这个规范是不正确的: require ‘spec_helper’ describe “friends routing” do it “routes to #index” do get(“/my/friends.json”, nil, {‘HTTP_ACCEPT’ => ‘application/vnd.myapp+json; […]

升级到Rspec 3后,符号与模块的比较失败

我刚从Rspec 2.99升级到Rspec 3,我的一些测试得到以下错误。 Failure/Error: Unable to find matching line from backtrace ArgumentError: comparison of Symbol with Module failed 我有以下控制器测试 require ‘spec_helper’ describe PeopleController, type: :controller do subject { response } describe :index do before { get :index } it { should_not be_success } it { should have_http_status ‘401’ } end end 知道可能导致错误的原因吗?

rake db:test:load,undefined方法`’为nil:NilClass

我想创建测试数据库。 开发数据库有以下设置: development: adapter: mysql2 encoding: utf8 database: c9 username: host: 当我运行命令时: rake db:test:load –trace ,显示错误: rake aborted! NoMethodError: undefined method `[]’ for nil:NilClass /usr/local/rvm/gems/ruby-2.0.0-p247/gems/activerecord-3.2.22/lib/active_record/railties/databases.rake:526:in `block (3 levels) in ‘ /usr/local/rvm/gems/ruby-2.0.0-p247/gems/rake-10.4.2/lib/rake/task.rb:240:in `call’ /usr/local/rvm/gems/ruby-2.0.0-p247/gems/rake-10.4.2/lib/rake/task.rb:240:in `block in execute’ /usr/local/rvm/gems/ruby-2.0.0-p247/gems/rake-10.4.2/lib/rake/task.rb:235:in `each’ /usr/local/rvm/gems/ruby-2.0.0-p247/gems/rake-10.4.2/lib/rake/task.rb:235:in `execute’ /usr/local/rvm/gems/ruby-2.0.0-p247/gems/rake-10.4.2/lib/rake/task.rb:179:in `block in invoke_with_call_chain’ /usr/local/rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize’ /usr/local/rvm/gems/ruby-2.0.0-p247/gems/rake-10.4.2/lib/rake/task.rb:172:in `invoke_with_call_chain’ /usr/local/rvm/gems/ruby-2.0.0-p247/gems/rake-10.4.2/lib/rake/task.rb:201:in `block in invoke_prerequisites’ /usr/local/rvm/gems/ruby-2.0.0-p247/gems/rake-10.4.2/lib/rake/task.rb:199:in `each’ /usr/local/rvm/gems/ruby-2.0.0-p247/gems/rake-10.4.2/lib/rake/task.rb:199:in […]

如何在Rails 5中期望RSpec中的Params哈希?

我正在升级到Rails 5,即使我传递了我应该的数据,它已经破坏了我的RSpec。 问题显然在这里: expected: ({“name”=>”MyString”}) got: (“MyString”} permitted: true>) 这意味着我需要能够修复我的控制器断言,以便它能够预期后者。 这是需要改变的路线。 expect_any_instance_of(Hospital).to receive(:update).with({ “name” => “MyString” }) 可能是这样的 expect_any_instance_of(Hospital).to receive(:update).with(params: { “name” => “MyString” }, permitted: true) 我只是不知道语法是什么,并且无法在Rails 5的分散文档中找到它,或者在Rails 5上有关RSpec的不存在的注释/ Stack Overflow问题。 完整错误和控制器规格 2) HospitalsController PUT update with valid params updates the requested hospital Failure/Error: if @hospital.update(hospital_params) # received :update with unexpected arguments expected: ({“name”=>”MyString”}) […]

render_views返回NoMethodError

我目前正在阅读Michael Hartl的Ruby on Rails教程,在本教程的第3.2.2节中,他谈到了使用RSpec来测试页面的标题。 我的测试(我自己编写,遵循他的教程)一直未通过标题测试(它可以找到标签,但标题总是一个空白字符串),并且一些搜索谷歌告诉我,我需要包含函数render_views传递测试。 我的问题是无论我尝试什么,RSpec NoMethodError为render_views返回render_views 。 我试过的事情: spec_helper.rb config.render_views describe “Static Pages” do render_views … end在spec文件中describe “Static Pages” do render_views … end describe “Static Pages” do RSpec::Rails::ViewRendering.render_views … end在spec文件中describe “Static Pages” do RSpec::Rails::ViewRendering.render_views … end 所有这些都返回NoMethodError 。 我没有完全遵循他的Gemfile,所以Ruby和相关gem的版本是: Ruby:1.9.3-p125 铁轨:3.2.9 rspec:2.12.0 rspec-rails:2.12.0 capycabra:2.0.1 我在Windows 7上使用RubyMine 4.5.4。在命令提示符下运行测试会返回相同的错误。 spec文件是static_pages_spec.rb ,位于spec/requests 我的static_pages_spec.rb的代码: require_relative ‘../spec_helper’ describe “Static […]

Capybara选择(“单选按钮”)不起作用

我的观点快照: 然而,在我的Rspec集成测试文件(spec / requests / requests_spec.rb)上,当我写时(注意,选择单选按钮是用户从列表中请求项目的表单的一部分,并且测试是针对结果页面的提交后,应指明用户请求的项目)。 我正在使用gem’rspec-rails’,’2.13.1′ describe “Requests” do subject { page } describe “new request” do before { visit root_path } describe “with valid information” do before do choose(“Snow/waterproof shell (upper)”) click_button submit end it { should have_content(“Snow/waterproof shell (upper)”) end end end 我总是得到错误: ←[31mFailure/Error:←[0m ←[31mchoose(“Snow/waterproof shell (upper)”)←[0m ←[31mCapybara::ElementNotFound←[0m: ←[31mUnable to find radio […]

Rspec渲染文本

我有这个代码 if @temp_user.save sign_in(:user, @temp_user) render text: “OK” else render text: render_to_string(:partial => “errors”) end 我尝试用rspecvalidation渲染“OK” 这是我的实际规格: it “render text OK” do post :create, {:agent => valid_attributes} # response.should have_content(“OK”) response.should render_template(:text => “OK”) end 但这个规范总是会响应0次失败,即使我把“OKI”放到位“OK” 有人对此有一个建议吗?

使用Minitest测试控制器

我正在尝试使用Minitest找到测试控制器的示例,但我只发现了一对,只是validation了呈现的模板以及返回的“成功”。 这对我来说似乎没什么帮助。 Minitest用于测试控制器吗? Railscast( http://railscasts.com/episodes/327-minitest-with-rails )以及我发现的其他几篇文章似乎都在使用Minitest进行模型测试,并与Capybara进行集成测试。 控制器测试怎么样? 他们可以用Minitest测试吗? 如果是这样,是否有任何实际测试操作的真实示例? 在经过几个小时的搜索之后,我找不到任何东西似乎很奇怪。 我知道这很模糊,但是我想决定是否应该使用RSpec或Minitest,但是如果不知道如何使用Minitest真正测试控制器,我不知道它是如何真正的选择,但我继续阅读一些关于它的一般好评如潮。