我刚刚安装了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从默认值更改true为falseto !(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 是否无法访问属性时我就是这样做的
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)
这样做有更好的方法吗?
...谢谢
我使用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
我试图在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'
我究竟做错了什么?
我最近阅读了一篇关于 Ruby 的关于隐藏方法的局部变量的行为的博客文章(与隐藏方法局部变量的块变量不同,这也在StackOverflow 线程中讨论过),我发现了一些行为我不太明白。
[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_accessorname = "Unknown"赋值行时#say_name,它会考虑在赋值之后name使用的任何引用来引用局部变量Person有一个name分配给它的初始化时,name在最后一行引用的#say_name方法是nil它看起来像 …
我在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
我目前正在研究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文件的呈现方式.
我的问题是:
:locale对双弦插值的使用似乎不够优雅.有没有办法更改此代码,以便我可以将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
通过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.coffee和users.js.coffee,有和没有$(document).ready ->,仍然没有去.然后我想也许默认情况下不包括timeago所需的库jquery-rails,所以我添加了它们:
应用程序/资产/ JavaScript的/ …
jquery internationalization timeago ruby-on-rails-3 railstutorial.org
我正在制作一个小型的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) 在阅读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.
任何'提示/帮助'将不胜感激