Tag: rspec

Rpsec测试失败了’rspec’但没有’rspec path_of_the_file’

如果我运行此命令“rspec ./spec/requests/api/v1/password_reset_request_spec.rb”此文件中的所有测试都通过。 但是当我运行“rspec”时,我对这个文件中的测试有了一个假设。 1) /api/v1/password_reset #request when the email match with a runner when there is no request pending create a token for reset the password Failure/Error: post(“/api/v1/password_reset/request”, @params) NoMethodError: undefined method `reset_password’ for RunnerMailer:Class # ./app/services/password_manager.rb:35:in `reset_password’ # ./app/controllers/api/v1/password_reset_controller.rb:31:in `request_new_password’ # ./spec/requests/api/v1/password_reset_request_spec.rb:108:in `block (5 levels) in ‘ 这是调用该方法的行: RunnerMailer.reset_password(@identity, @identity.reset_password_token).deliver 这是RunnerMailer类: class RunnerMailer < […]

Rails 3和Rspec:计数器缓存列在预期1时更新为2

我正在用Rspec测试一个名为Solutions的模型,它有很多喜欢。 解决方案存储它有多少喜欢(counter_cache)。 它有一个“likes_count”属性(和相应的db字段)。 当我创建一个与解决方案关联的Like记录时,我希望解决方案属性“likes_count”应该从nil更新为1.当我在控制台中执行此操作时,它可以正常工作。 但是当我运行规范时,我在控制台中执行相同操作,它将TWICE更新为“likes_count”字段,将其设置为2。 看一下(在控制台中) 工作 : irb(main):001:0> solution = Factory(:solution) irb(main):004:0> solution.likes_count => nil irb(main):006:0> like = Factory(:like, :likeable => solution) => # irb(main):007:0> solution.reload.likes_count => 1 看看规格结果不工作 : 1) Solution counter cache should be increased when a like is created Failure/Error: subject.reload.likes_count.should be 1 expected # => 1 got # => 2 […]

Capybara :: ElementNotFound,但它就在那里

我收到以下错误: Capybara::ElementNotFound: Unable to find field “username” ./spec/controllers/sessions_controller_spec.rb:10:in `block (3 levels) in ‘ 规格: require ‘spec_helper’ describe SessionsController do before :each do @user = FactoryGirl.create(:user) end context ‘creating a new session’ do it ‘can set the current_user variable to the logged user’ do visit ‘/login’ fill_in ‘username’, with: ‘gabrielhilal’ #I have tried `Username` as well […]

Rails 3:ActiveRecord观察者:after_commit回调在测试期间不会触发,但是after_save会触发

我有一个Rails 3应用程序。 我为某些模型使用了after_save回调,为其中一个模型使用了after_commit回调。 代码工作正常的所有代码,但在RSpec测试期间,当我保存Thing模型时,不会调用after_commit回调。 例如 class ThingObserver < ActiveRecord:Observer observe Thing def after_commit(thing) puts thing.inspect end end 如果我将方法名称更改为after_save ,则在测试期间将其调用为fine。 我需要能够为此特定模型使用after_commit ,因为在某些情况下,对“事物”的更改发生在Web服务器中,但观察者的效果发生在Sidekiq工作器中,而after_save不保证数据当工人做好准备时,它已经承诺并且可以使用。 RSpec的配置在spec / spec_helper.rb中如下所示 Rspec.configure do |config| #yada yada config.use_transactional_fixtures = true #yada yada end 我还调整了rake db:create以便从structure.sql文件中提取。 在lib / tasks / db.rb中 task setup: [ ‘test:ensure_environment_is_test’, ‘db:create’, ‘db:structure:load’, ‘db:migrate’, ‘db:seed’ ] 我这样做是为了让我可以运行测试以确保数据库强制执行外键约束。 有没有办法运行after_save和after_commit回调而不使Rspec use_transactional_fixtures == […]

在rails上的ruby中运行测试时有一个默认端口

我试图用rake spec我运行我的测试我使用rspec,capybara与selenium作为webdriver。 问题是我什么时候尝试运行规范它每次都在不同的端口启动测试环境。 我不希望这发生,因为它弄乱了我的Facebook登录。 我怎样才能让环境每次都在同一个端口启动。 请帮忙!

RSpec + Capybara请求规格w / JS无法正常工作

使用Javascript时,我无法获得请求规范。 如果我在没有Javascript的情况下运行它们,我的规范就会通过 (该页面可以使用或不使用JS)。 具体来说,当我做Post.should have(1).record这样的断言时,规范就失败了。 Capybara只是不从DB中获取记录,并且在运行之间不会清理数据库。 我已经尝试使用DatabaseCleaner禁用事务管道 – 我猜这是常见的方法。 没有骰子。 我也尝试(并且,理想情况下更喜欢)在没有DatabaseCleaner的情况下运行,使用事务夹具并强制AR在线程之间共享相同的连接( JoséValim描述的补丁 )。 再一次,没有骰子。 此外,我也试过在Capybara-webkit和Selenium之间切换 – 问题仍然存在。 我已经提出了一个只有一个基本的Post脚手架的示例应用程序,它复制了这个问题: https : //github.com/cabgfx/js-specs有一个带有事务夹具和AR共享连接的spec_helper.rb,以及一个spec_helper_database_cleaner。 rb用于其他场景。 我通常使用Spork,但我在spec_helper.rb文件中都禁用了它,只是为了消除潜在的失败点(在两个应用程序中;“真正的”和示例应用程序)。 我在Macbook Air上使用Pow进行本地开发,使用MRI 1.9.3至RVM运行OS X 10.7.3。 (我也试过1.9.2)。 希望我有意义 – 任何指导/帮助/指针都非常感谢!

Rspec没有在Linux中加载ControllerMacros模块(但在OS X上很好)

我在使用Devise和Rspec的Rails应用程序中编写了一些控制器测试。 按照本指南 ,我在/ spec / support /目录中创建了一个controller_macros.rb 。 在同一目录中还有一个devise.rb文件,其中包含: RSpec.configure do |config| config.include Devise::TestHelpers, type: :controller config.extend ControllerMacros, :type => :controller end spec_helper.rb文件中需要这两个文件,使用以下行: Dir[Rails.root.join(“spec/support/**/*.rb”)].each { |f| require f } 现在这里有点奇怪 :这种方法在OS X笔记本电脑上运行良好,但在我的Linux桌面上失败了。 它们都使用相同的RVM设置,相同的gemsets,相同的一切。 我在Linux中运行测试时得到的错误是: uninitialized constant ControllerMacros (NameError) 显然, controller_macros.rb模块无法在Linux中加载。 我已经看到SO答案表明config.extend可以更改为config.include ,但这并不能解决问题。 我可以看到的任何想法或我可以测试什么来帮助隔离问题? 我正在使用Rails 4.1.8和Rspec 3.1.7。

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中访问数据库?

我经常看到在Rspec中使用mock的代码,如下所示: describe “GET show” do it “should find and assign @question” do question = Question.new Question.should_receive(:find).with(“123”).and_return(question) get :show, :id => 123 assigns[:question].should == question end end 但是为什么他们不在数据库中添加id => 123的Question ,通过get检索它并销毁它? 这是最佳做法吗? 如果我不遵守规则,会发生什么不好的事情吗?

测试基础(抽象)控制器

我有一个具有一些function的基本控制器,无法从外部访问基本控制器,没有路由匹配它。 然后,我用其他控制器扩展该控制器以添加额外的function和路由,我有3个控制器扩展该基本控制器只是为每个控制器定义3个方法。 我想测试基本控制器,但我做不到 post :index 因为没有该行动的路线(没有路线匹配错误) 我不想将这些测试添加到这3个控制器中的一个,因为它们发生了很大的变化(控制器在… 3周的运动中使用然后被删除)。 一些代码…: 基本控制器,CampaignController class CampaignController < ApplicationController def index #some code… end def campaign_name raise('campaign_name missing') end def campaign_url raise('campaign_url missing') end #more actions…. end 其中一个可访问的控制器,SchoolCampaignController class SchoolCampaignController < CampaignController def campaign_name 'school' end def campaign_url school_url end end 那些控制器基本上是这样的,但有时我需要覆盖其中一个基本动作 那么,我做错了什么? 我该如何正确测试CampaignController? 编辑:我不想测试那两个引发错误的方法,我想测试索引,例如,或者其他一些操作(未显示) 我尝试过“response = controller.index”,但是它没有调用beforefilter而且响应不是http响应,它只是该命令的输出(我不能做像…响应这样的期望。应该render_template(xxxx) 编辑2:绕过路由错误我在before(:all)块中创建了测试内部的路由,然后路由不是问题,但现在,我得到有关非现有视图的错误(每个可访问控制器实现所有观点,但抽象的有非)