Tag: rspec

升级到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 知道可能导致错误的原因吗?

如何从Rspec输出中禁用http日志?

我正在为我的rails应用程序编写测试。 我只想看到’。’ 当rspec运行时,和’*’符号。 但我正在观看HTTP日志,不知道如何禁用它们。 我终端输出的一块rspec: ………….get http://0.0.0.0:3000/device_info/?api_session=%23%7Bapi_session%7D User-Agent: “Faraday v0.8.7” 404 content-type: “text/html” x-cascade: “pass” connection: “close” server: “thin 1.5.1 codename Straight Razor” …..get http://0.0.0.0:3000/device_info/12345?api_session=%23%7Bapi_session%7D User-Agent: “Faraday v0.8.7” 400 .. 我假设原因可能是’法拉第’gem的配置。 如何从我的rspec输出中禁用此日志?

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 […]

使用Capybara + Rails3找不到要点击的元素

背景 :我正在使用Capybara和Rspec来测试Rails 3应用程序。 使用的驱动程序 :Selenium 问题 :我无法找到“登录”按钮,以便在我的测试中点击。 HTML代码: Email Password Forgot password… Cancel 测试失败 it “should login correctly if the right credentials are given”, :js => true do Capybara.default_wait_time = 5 Capybara.reset_sessions! visit ‘/’ click_link(‘login_link’) #this will bring a modal window with the code posted above using js within(“#login”) do fill_in ‘user_email’, :with => “my-email@example.com” […]

如何通过rake任务传递-f specdoc选项

我正在使用rails 2.3.5 .rake规范工作正常。 这是来自spec –help。 spec –help -f, –format FORMAT[:WHERE] Specifies what format to use for output. Specify WHERE to tell the formatter where to write the output. All built-in formats expect WHERE to be a file name, and will write to $stdout if it’s not specified. The –format option may be specified several times […]

rails rspec没有路由匹配

我正在尝试测试我的路由(它们可以正常处理实际请求)并收到此错误: ActionController::UrlGenerationError: No route matches {:action=>”api/login”, :controller=>”login”, :email=>”a@a.com”, :password=>”super_secure”} 我看了很多类似的问题,但找不到我问题的准确答案。 我的路线是: Rails.application.routes.draw do post ‘api/login’ => ‘login#email_login’ 我的考试是 describe LoginController do it ‘works fine’ do password = ‘super_secure’ salt = BCrypt::Engine.generate_salt.to_s hash_password = BCrypt::Engine.hash_secret(password, salt).to_s user_login = FactoryGirl.create(:user_login, user_hash: hash_password, salt: salt, email: ‘a@a.com’) post ‘api/login’, password: password, email: user_login.email expect(response).to be_success end end 最后我的LoginController是: […]

我应该使用“rake spec”还是“rspec”(不能让“rake spec”工作)?

我在Rails 3.2上,我正在使用rspec(2.11.1)。 当我使用“rake spec”运行我的测试套件时,我会失败。 当我用“rspec”运行时,一切都过去了。 我已经看到过这个问题的其他提及,但没有明确的解释正在发生的事情和最佳实践。 如果我做“rake spec”或“rake tmp:clear && rake spec”我的测试失败了。 如果我执行“rspec”或“rspec spec”或“rake db:test:prepare && rspec”,我的测试通过。 我认为唯一的区别是rake做了“db:test:prepare”,但是如果我在运行rspec之前手动执行,那么我的测试就会通过,所以这不是故事的全部内容。 做了一些阅读后,我改变了我的Gemfile。 之前我根据“RSpec Book”(p328)设置了它,它描述了将rspec gem放在“group:development,:test”块中。 阅读了其他一些SOpost后,我删除了“:development”并做了一个捆绑。 现在“rake spec”什么都不做。 “rspec”仍然像以前一样工作。 非常困惑…

测试不通过:未定义的方法`authenticate!’ 为零:NilClass?

我有以下失败: Failures: 1) RelationshipsController creating a relationship with Ajax should increment the Relationship count Failure/Error: xhr :post, :create, relationship: { followed_id: other_user.id } NoMethodError: undefined method `authenticate!’ for nil:NilClass # ./spec/controllers/relationships_controller_spec.rb:14:in `block (4 levels) in ‘ # ./spec/controllers/relationships_controller_spec.rb:13:in `block (3 levels) in ‘ 但是很奇怪,如果我访问该网站,事情就会起作用(如果我点击“ 关注”按钮, 关注 followers计数器会增加: 而最奇怪的是,没有任何认证! relations_controller_spec.rb中的方法: require ‘spec_helper’ describe RelationshipsController do let(:user) […]

如何在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”}) […]

在rspec测试中发布到不同的控制器

如何发布到与测试脚本当前指向的控制器不同的控制器? 示例:在u​​ser_controller_spec.rb中 it “should just post to users” do post :create, @params # this goes to the users controller end 我想做的事情如下: it “should post to user and people to do some integration testing” do post :create, @params # this goes to the users controller still post ‘people’, :create, @params # this goes to the people […]