Tag: ruby

为什么Rails测试环境中的机架env哈希是空的?

在我的Rails应用程序中,我正在访问我的一个控制器操作中的env哈希。 有点像: def my_before_filter env[‘some.key’] = “Something or other” end 这对我的要求非常有用。 如果我在测试环境中启动我的Rails应用程序,并访问如下操作: # /users in UsersController#index def index puts env.inspect end 然后,env哈希的内容按预期输出到控制台。 当我从RSPec示例中获取此操作时,输出是空哈希? it ‘should get the index action’ do get :index end …..{}…. # rspec output 为什么env哈希是空的? 我已经构建了一个虚拟轨道应用来展示这一点

unit testing与夹具的多态关联

我收到此错误消息: ERROR[“test_profile_display”, UsersProfileTest, 2.569931] test_profile_display#UsersProfileTest (2.57s) NoMethodError: NoMethodError: undefined method `posts’ for nil:NilClass app/controllers/users_controller.rb:14:in `show’ test/integration/users_profile_test.rb:22:in `block in ‘ app/controllers/users_controller.rb:14:in `show’ test/integration/users_profile_test.rb:22:in `block in ‘ 在@posts = @user.character.posts.paginate(page: params[:page])行中的UsersController中的character似乎是nil。 用户和角色之间存在多态关系。 我以为我在fixtures中使用了正确的语法告诉rails用户Bazley有一个fixture:在characters.yml中: character_bazley: sociable: bazley (user) 如何说服rails用户夹具确实有属于它的角色? 测试/集成/ users_profile_test.rb: require ‘test_helper’ class UsersProfileTest img.gravatar’ assert_match @user.character.posts.count.to_s, response.body assert_select ‘div.pagination’ @user.character.posts.paginate(page: 1).each do |post| assert_match post.content, response.body […]

Ruby相当于PHP的ucfirst()函数

Ruby中最好的方法是什么(使用Rails,如果相关的话)来大写字符串的第一个字母? 注意String#capitalize不是我想要的,因为除了大写字符串的第一个字母之外,这个函数还使所有其他字符小写(我不想要它 – 我想保持它们不受影响): >> “a A”.capitalize => “A a”

我应该何时在Cucumber和RSpec工作流程中单独测试视图?

经过一段时间的Cucumber和RSpec BDD,我意识到我的许多黄瓜function只是更高级别的视图测试。 当我开始编写我的场景然后转到RSpec时,我不会编写视图规范,因为我可以复制并粘贴部分场景,这将是丑陋的复制。 以这种情况为例 Scenario: New user comes to the site Given I am not signed in When I go to the home page Then I should see “Sign up free” 我知道这不是直接测试视图,但是编写单独的视图规范来检查同样的事情对我来说似乎是多余的。 我接近黄瓜错了吗? 我究竟应该在视图规格中测试什么? 我应该为每个视图编写它们,例如测试视图的操作 def show @project = current_user.projects.first end 或者我应该只测试更复杂的视图?

这个Rails代码适用于Ruby 1.8.7,但不适用于1.9.2

编辑 : 这有效: current_user.id, :started => Time.now.utc, :step_quiz_id => @course_step.step.step_quiz.id) : @quiz_attempt), :url => submit_quiz_course_course_step_path(@course_step.course, @course_step) do |f| %> 但这不会:(尝试使用form_for作为函数form_for() current_user.id, :started => Time.now.utc, :step_quiz_id => @course_step.step.step_quiz.id) : @quiz_attempt), :url => submit_quiz_course_course_step_path(@course_step.course, @course_step)) do |f| %> 如主题中所述,代码在Ruby 1.8.7中运行完美,但在1.9.2中有错误,似乎无法弄清楚原因。 代码 : ‘course_steps/header’ %> ‘course_steps/quiz_results’ %> Instructions current_user.id, :started => Time.now.utc, :step_quiz_id => @course_step.step.step_quiz.id) : @quiz_attempt, :url […]

请帮助您使用此测试版代码,我该如何解决?

可能重复: 为什么这段代码不会产生预期的结果呢? 我有代码: def check_beta_code beta_code_array = [‘AAAAAAAAAA’, ‘BBBBBBBBBB’, ‘CCCCCCCCCC’, ‘DDDDDDDDDD’, ‘EEEEEEEEEE’] beta_code_array.each do |code| if :beta_code != code errors.add(:beta_code, “Invalid Beta Code”) end end end 此代码的问题在于,即使有人输入了正确的密码,仍然会生成4个错误,因为其他4个错误都不正确。

如何查看请求对象的外观?

每当我尝试 logger.info (“REQUEST: \n ” + request.to_yaml) 我收到此错误: can’t dump anonymous class Class 查看请求对象中的内容(以可读方式)的最佳方法是什么?

Ruby on Rails:控制台/ .rb文件中的行为之间的差异

我想使用存储在credentials.yml.enc文件中的信息来获取Rails 5.2应用程序。 但是,我正在努力获得一个在控制台中完美运行的命令,以便在插入.rb文件时以相同的方式运行。 在Rails控制台(在我的本地开发计算机上) Rails.application.credentials.username返回”my_username” 如果我在一个非常简单的db_backup.rb文件中插入此行,如下所示,我收到错误: NameError: uninitialized constant #<Class:#>::Rails db_backup.rb : Model.new(:db_backup, ‘Description for db_backup’) do ## # PostgreSQL [Database] # database PostgreSQL do |db| db.username = Rails.application.credentials.username end end 请问你能解释为什么我在Rails控制台/ .rb文件中使用完全相同的代码行时会得到不同的行为吗?

如何使用Rails提供静态html页面?

我有Rails应用程序,文档是/ public文件夹中的静态html页面。 我公共文件夹的树: -public -docs -intro introduction.html -css some.css index.html Index.html文件是: Some of the text href=”intro/introduction.html”>Introduction 当我打开索引页面css没有加载,当我尝试点击链接时它说路由错误。 据我所知,静态页面不知道在哪里查找css和其他html页面。 我只想要没有任何路由和控制器的静态页面,nginx。 有任何想法吗?

Rails 4 Racing / Concurrency。 避免死锁

我目前在Sidekiq-Unique-Jobs和Sidekiq-Status的帮助下使用Sidekiq在我的应用程序上执行任务。 工人执行的工作很小,几乎总是立即执行。 (很少或根本没有队列) 我正在“黑客攻击”sidekiq同步执行任务(检查Controller无法找到工作人员创建的对象 ),这些作业很小且执行速度快(通常不到1秒)。 我的应用程序需要同步运行作业并获取其详细信息(记录创建/更新) 随着我使用的“跛脚”解决方案: 20.times do status = Sidekiq::Status::get balance, :exp_status if [“done”].include?(status) break end sleep(0.2) end 创建一个队列并确保通过params(sidekiq-unique-jobs)同一个用户同时执行不超过1个作业我可以避免所有死锁,但是我觉得它应该是一个更好的方法来执行此操作,而不是黑客sidekiq因为它意味着异步执行作业。 问题是 :对于sidekiq是否有任何替代或类似的gem可以限制输入但是默认情况下是同步运行的? 我不能只问控制器Balance.find_or_create_by(user: user, market: market)因为它迟早会给我死锁(记录被同时编辑/操纵/创建)但我觉得这个sidekiq解决方案我从长远来看,使用也不行。 我错过了一些基本的东西吗? 如何确保通过中间件或类似的东西不会同时执行重复的参数/动作以避免死锁?