小编Pau*_*nti的帖子

SimpleCov报告在使用Spork运行RSpec测试后没有在Rails 3应用程序中生成

我刚刚安装了SimpleCov gem以在我的Rails 3.2.6应用程序上生成代码覆盖率报告,它与RSpec一起工作很好,而不是Spork.我可以通过运行获得所需的正确报告rspec --no-drb spec/,但我也想让它们使用Spork运行rspec spec/.

鉴于有人在这方面取得了成功,我的设置似乎有误.我已经阅读了设置说明以及声称为Spork用户修复的GitHub问题,但仍然没有运气.我想知道是否有人可以提供他们可以用作参考的工作规范/ spec_helper.rb文件的完整示例,因为广泛的谷歌搜索只发现了片段.根据其他网站的建议,我尝试将config.cache_classesin config/environments/test.rb从默认值更改truefalseto !(ENV['DRB'] == 'true'),没有运气.

作为参考,这是我的设置方式:

的Gemfile

group :development, :test do
  # ...
  gem 'rspec-rails', '2.10.1'
end

group :test do
  # ...
  gem 'spork', '0.9.0'
  gem 'simplecov', '0.6.4', require: false
end
Run Code Online (Sandbox Code Playgroud)

的.spec

--colour
--drb
Run Code Online (Sandbox Code Playgroud)

spec/spec_helper.rb(根据GitHub问题更改)

require 'simplecov'
SimpleCov.start 'rails'

require 'rubygems'
require 'spork'

Spork.prefork do
  unless ENV['DRB']
    require 'simplecov'
    SimpleCov.start 'rails' …
Run Code Online (Sandbox Code Playgroud)

rspec code-coverage spork ruby-on-rails-3 ruby-on-rails-3.2

8
推荐指数
1
解决办法
4293
查看次数

rails attr_accessible rspec check

当我想测试RSpec 是否无法访问属性时我就是这样做的

class Foo
  attr_accesible :something_else
end

describe Foo do
  it('author should not be accessible')    {lambda{described_class.new(:author=>true)}.should raise_error ActiveModel::MassAssignmentSecurity::Error}
  it('something_else should be accessible'){lambda{described_class.new(:something_else=>true)}.should_not raise_error ActiveModel::MassAssignmentSecurity::Error}
end
Run Code Online (Sandbox Code Playgroud)

这样做有更好的方法吗?

...谢谢

ruby-on-rails shoulda attr-accessible ruby-on-rails-3

6
推荐指数
1
解决办法
1281
查看次数

如何使用travis-ci的.travis.yml为Node.js应用程序提供环境参数?

我使用travis-ci来测试我的node.js应用程序.由于应用程序需要用户使用Access Key和Secret Key进行登录测试,我需要在travis-ci的.travis.yml文件中指定这两个键.那我该怎么做?以及如何在Node中获取这些环境参数?

像这两个参数:https://github.com/ikbear/nodejs-sdk/blob/feature/copy_and_move_file/test/rs.test.js#L22

我想在.travis.yml中指定它们,如下所示:

language: node_js
node_js:
  - 0.8
  - 0.6
  - 0.4
env:
  - QINIU_ACCESS_KEY = '2FRuiVGEsA511NS9pNd2uvuSB3k5ozXE_DHCH8Ov' QINIU_SECRET_KEY = 'CIRtcmymB3VeIfXebFvYxmMmH9u2oLKW6rffVvoK'
Run Code Online (Sandbox Code Playgroud)

那么如何从我的测试文件中获取QINIU_ACCESS_KEY和QINIU_SECRET_KEY?https://github.com/ikbear/nodejs-sdk/blob/feature/copy_and_move_file/test/rs.test.js

environment-variables node.js travis-ci

6
推荐指数
1
解决办法
8418
查看次数

不同rspec上下文中的代码重用

我试图在rails控制器规范中重用一些常用代码.对于管理员用户和普通用户,我有不同的上下文.但是,对于特定操作,大部分行为都是相同的,所以我尝试将该常见行为拉出到辅助函数中:

describe SomeController do
    def common_get_new
       # common stuff
    end 

    context "regular users" do
        describe "GET new" do
            common_get_new
        end
    end

    context "admin users" do
        describe "GET new" do
            common_get_new
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

这给了我错误:

undefined局部变量或方法`common_get_new'

我究竟做错了什么?

code-reuse rspec

5
推荐指数
1
解决办法
2834
查看次数

Ruby 局部变量隐藏实例方法的行为

我最近阅读了一篇关于 Ruby 的关于隐藏方法的局部变量的行为博客文章(与隐藏方法局部变量的块变量不同,这也在StackOverflow 线程中讨论过),我发现了一些行为我不太明白。

Ruby 的文档说

[V]变量名和方法名几乎相同。如果您没有指定这些含糊不清的名称之一,ruby 将假定您希望调用一个方法。一旦您分配了名称 ruby​​ 将假定您希望引用一个局部变量。

因此,给出以下示例类

# person.rb

class Person
  attr_accessor :name

  def initialize(name = nil)
    @name = name
  end

  def say_name
    if name.nil?
      name = "Unknown"
    end

    puts "My name is #{name.inspect}"
  end
end
Run Code Online (Sandbox Code Playgroud)

鉴于我现在通过阅读上述链接中的信息所了解的信息,我希望得到以下信息:

  • name.nil?语句仍将引用name由提供的实例方法attr_accessor
  • 当 Ruby 解析器看到方法中的name = "Unknown"赋值行时#say_name,它会考虑在赋值之后name使用的任何引用来引用局部变量
  • 因此,即使Person有一个name分配给它的初始化时,name在最后一行引用的#say_name方法是nil

看起来像 …

ruby shadowing pry

5
推荐指数
2
解决办法
629
查看次数

Heroku上的Ruby on Rails部署 - bootstrap-sass

我在heroku上部署时遇到了很大问题.真的不,不,为什么它不起作用.

这是我的宝石文件:

gem 'rails', '3.2.0'
gem 'pg'
group :assets do
  gem 'sass-rails',   '~> 3.2.3'
end
gem 'coffee-rails', '~> 3.2.1'
gem 'uglifier', '>= 1.0.3'
gem 'jquery-rails'
gem "rspec-rails", ">= 2.8.1", :group => [:development, :test]
gem "factory_girl_rails", ">= 1.7.0", :group => :test
gem "email_spec", ">= 1.2.1", :group => :test
gem "cucumber-rails", ">= 1.3.0", :group => :test
gem "capybara", ">= 1.1.2", :group => :test
gem "database_cleaner", ">= 0.7.1", :group => :test
gem "launchy", ">= 2.0.5", :group => :test
gem "devise", ">= 2.0.4"
gem …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails heroku asset-pipeline twitter-bootstrap ruby-on-rails-3.2

4
推荐指数
2
解决办法
5191
查看次数

Rails 3视图中的i18n markdown文件

我目前正在研究Michael Hartl的Rails教程,同时尝试了本书未涉及的其他一些内容.在完成创建静态页面的第5章之后,我决定将视图代码更改为HAML,使页面国际化,并将静态内容放入单独的(非部分)Markdown文件中,使用RDiscount gem来呈现它们.例如:

应用程序/视图/ static_pages/about.html.haml

- provide(:title, t('.about_us'))
:markdown
  #{render file: "static_pages/about.#{params[:locale]}.md"}
Run Code Online (Sandbox Code Playgroud)

static_pages目录下,我有像about.en.md,about.it.md,about.ja.md等Markdown文件,因此:locale参数中的插值决定了Markdown文件的呈现方式.

我的问题是:

  1. static_pages目录位与降价文件拥挤,那么,有没有任何合理的缺省/最佳实践地点(或许之外的应用程序目录),以保持这些降价文件,在那里他们可以大概由谁也不需要人编辑了解应用程序的内部工作原理?
  2. 有哪些更好的方法可以在视图中实现渲染多语言Markdown文件?我:locale对双弦插值的使用似乎不够优雅.
  3. 有没有办法更改此代码,以便我可以将Ruby变量传递到Markdown文件?我知道我可以,例如,#{language}只需将about.en.md更改为HAML部分(_about.en.html.haml),就可以在Markdown中使用变量,并将代码更改为:

    应用程序/视图/ static_pages/about.html.haml

    - provide(:title, t('.about_us'))
    :markdown
      #{render "about.#{params[:locale]}", language: 'Markdown!'}
    
    Run Code Online (Sandbox Code Playgroud)

    但是,有没有办法在不将Markdown文件更改为其他类型的文件的情况下执行此操作?如果存在这种方式,是推荐还是可行?

markdown haml internationalization railstutorial.org ruby-on-rails-3.2

4
推荐指数
1
解决办法
1416
查看次数

用i18n-ized Rails 3.2 app中的timeago jQuery插件替换time_ago_in_words

通过Rails Best Practices运行我完成的Rails Tutorial应用程序让我发出警告,不要使用该time_ago_in_words方法 "计算服务器端的时间太昂贵",因此他们提供了一些示例代码来更改您的实现以使用timeago jQuery插件.听起来它会做出有趣的改变,所以我试了一下.我使用的原始代码time_ago_in_words分为两个地方:

应用程序/视图/共享/ _feed_item.html.haml

# ...
%span.timestamp
  = t('.time_posted_ago', time: time_ago_in_words(feed_item.created_at) )
Run Code Online (Sandbox Code Playgroud)

应用程序/视图/微柱/ _micropost.html.haml

# ...
%span.timestamp
  = t('.time_posted_ago', time: time_ago_in_words(micropost.created_at))
Run Code Online (Sandbox Code Playgroud)

我使用HTML5 time标记将代码更改为使用timeago,如下所示:

应用程序/视图/共享/ _feed_item.html.haml

# ...
%time.timeago{ datetime: feed_item.created_at.getutc.iso8601 }
  = t('.time_posted_ago', time: feed_item.created_at.to_s)
Run Code Online (Sandbox Code Playgroud)

应用程序/视图/微柱/ _micropost.html.haml

# ...
%time.timeago{ datetime: micropost.created_at.getutc.iso8601 }
  = t('.time_posted_ago', time: micropost.created_at.to_s)
Run Code Online (Sandbox Code Playgroud)

我想,只留下我将timeago()方法添加到我的coffeescript文件中:

应用程序/资产/ JavaScript的/ application.js.coffee

$(document).ready ->
  $("time.timeago").timeago()
Run Code Online (Sandbox Code Playgroud)

这不起作用,所以我尝试将语句移动到microposts.js.coffeeusers.js.coffee,有和没有$(document).ready ->,仍然没有去.然后我想也许默认情况下不包括timeago所需的库jquery-rails,所以我添加了它们:

应用程序/资产/ JavaScript的/ …

jquery internationalization timeago ruby-on-rails-3 railstutorial.org

4
推荐指数
1
解决办法
2528
查看次数

如何使用rspec测试CLI的stdin

我正在制作一个小型的Ruby程序,无法弄清楚如何编写模拟多个用户命令行输入的RSpec规范(功能本身可行).我认为这个StackOverflow的答案可能涵盖了最接近我的地方,但这并不是我需要的.我使用Thor作为命令行界面,但我不认为这是Thor的任何问题.

程序可以从文件或命令行读取命令,并且我已经能够成功编写测试以读取执行它们.这是一些代码:

cli.rb

class CLI < Thor
  # ...
  method_option :filename, aliases: ['-f'],
                desc: "name of the file containing instructions",
                banner: 'FILE'

  desc "execute commands", "takes actions as per commands"
  def execute
    thing = Thing.new
    instruction_set do |instructions|
      instructions.each do |instruction|
        command, args = parse_instruction(instruction) # private helper method
        if valid_command?(command, args) # private helper method
          response = thing.send(command, *args)
          puts format(response) if response
        end
      end
    end
  end

  # ...

  no_tasks do
    def instruction_set
      if options[:filename] …
Run Code Online (Sandbox Code Playgroud)

ruby stdin rspec command-line-interface thor

4
推荐指数
1
解决办法
5139
查看次数

RubyTutorial 10.5.2 Rspec测试微博分页

在阅读Michael Hartl撰写的Learn Rails书时,我对其中一个练习感到困惑. 通过Michael Hartl的例子学习Rails

"添加微博分页测试"

我的错误测试,放在登录用户"do"的'describe'中,如下所示:

describe "pagination" do
    before(:all) do 
      30.times { FactoryGirl.create(:micropost, user: user) }
    end
    after(:all) { user.feed.delete_all }
    page.should have_selector('div.pagination') }

    it "should list each micropost" do
      user.feed.paginate(page: 1).each do |user|
        page.should have_selector('li', text: user.name)
      end
    end
  end 
Run Code Online (Sandbox Code Playgroud)

无论我是做page.should还是page.should_not,测试都会显示为pass.

任何'提示/帮助'将不胜感激

rspec-rails ruby-on-rails-3 railstutorial.org

3
推荐指数
1
解决办法
1134
查看次数