几乎每一个我遇到的spec文件最终都会写出如下内容:
before :each do
@cimg = Factory.build :cimg_valid
@cimg.stub(:validate_img).and_return true
@cimg.stub(:validate_img_url).and_return true
@cimg.stub(:save_images).and_return true
@cimg.stub(:process_image).and_return true
@cimg.stub(:img).and_return true
end
Run Code Online (Sandbox Code Playgroud)
我的意思是,我从Factory.build获得的模型是完全有效的.但是,如果我不存储那些东西它会保存文件系统中的东西,并验证我没有测试的东西......
我的意思是,我认为做这样的事情会更干净:
before :each do
@cimg = Factory.build :cimg_for_testing_tags
end
Run Code Online (Sandbox Code Playgroud)
如果甚至可以在工厂内进行存根.
存根模型的正确方法是什么?
我尝试了以下方法:
es:
activerecord:
attributes:
name: Nombre
Run Code Online (Sandbox Code Playgroud)
它没有用.
但以下工作:
es:
activerecord:
attributes:
person:
name: Nombre
Run Code Online (Sandbox Code Playgroud)
哪种方法可以跨模型定义默认属性?
我也在使用Formtastic和Active Admin.
activerecord locale ruby-on-rails internationalization models
我尝试将默认ruby命令更改为1.9.2,但Passenger一直运行1.8.7
Passenger是用嵌入式Ruby编译的吗?
我过去曾使用过Rails,我使用ActiveAdmin来制作管理面板.我正在转向Node,我将使用Sails作为单页应用程序的框架,可能在客户端使用AngularJS,但仍然存在管理面板的问题.
鉴于Sails几乎为RESTful API访问设置了所有资源,我考虑使用基于客户端的管理面板.但我不知道这样的事情是否存在.如果不是,我想我会自己做,但我不想重新发明轮子.
当我调用Array#-它似乎没有调用我正在比较的字符串上的任何比较方法:
class String
def <=>(v)
puts "#{self} <=> #{v}"
super(v)
end
def ==(v)
puts "#{self} == #{v}"
super(v)
end
def =~(v)
puts "#{self} =~ #{v}"
super(v)
end
def ===(v)
puts "#{self} == #{v}"
super(v)
end
def eql?(v)
puts "#{self}.eql? #{v}"
super(v)
end
def equal?(v)
puts "#{self}.equal? #{v}"
super(v)
end
def hash()
puts "#{self}.hash"
super
end
end
p %w{one two three} - %w{two}
Run Code Online (Sandbox Code Playgroud)
它只是返回:
["one", "three"]
Run Code Online (Sandbox Code Playgroud)
那么,Array#-做什么?
另外,我使用的是Ruby 1.9.2p290.在1.8.7中它似乎导致无限循环.
ruby arrays operator-overloading subtraction comparison-operators
我有一个表User继承自一个名为的表Person
长话短说,而不是必须做以下事情:
f.inputs 'Something' do
f.inputs for: :person do |f|
f.input :name
f.input :surname
end
f.input :account
end
Run Code Online (Sandbox Code Playgroud)
这会产生一个fieldset内部ol,这本身就是无效的,但这不是让我担心的问题.我想摆脱fieldset所有属性显示在同一级别.
f.inputs 'Something' do
f.input :name, for: :person
f.input :surname, for: :person
f.input :account
end
Run Code Online (Sandbox Code Playgroud)
当然这是无效的,在输入中没有for:for.
我正在考虑使用委托,但后来我虽然accepts_nested_attributes_for在Person模型中也有很多,但它们会破坏.
该Person表也被另一个模型继承.
有没有透明化的宝石,让我继承模型?
acts_as_taggable_on实现工作得很好,但我还需要声明标签别名.
我发现了一个声称这样做的插件,acts_as_taggable_with_aliases,但是最后一次提交是在2009年并且不在gem存储库中,所以我认为该项目现在已经死了.
有什么办法可以实现这个目标吗?
我有这个:
def valid_attributes
{ :email => "some_#{rand(9999)}@thing.com" }
end
Run Code Online (Sandbox Code Playgroud)
对于Rspec测试吧?但我想做这样的事情:
def valid_attributes
static user_id = 0
user_id += 1
{ :email => "some_#{user_id}@thing.com" }
end
Run Code Online (Sandbox Code Playgroud)
我不想user_id从任何地方访问,但这种方法,这可能与Ruby有关吗?
在重写ng-include我的需求的同时,我发现了direcive ngIncludeFillContentDirective,它被声明为ng-include:
.directive({ngInclude: ngIncludeDirective}).directive({ngInclude: ngIncludeFillContentDirective})
您可以在此处查看ngInclude源.你可以在这里看到如上所述调用的指令方法.
那么,它对实际指令的影响到底是什么?它只是作为另一个指令应用吗?它有特殊意义吗?
例如,如果我有一个传递所有验证的图像,例如尺寸,尺寸,类型等,但是当我必须处理它时,由于某种未知的原因,ImageMagick无论如何都会抛出一个错误...我应该如何处理?
ruby error-handling exception-handling ruby-on-rails conventions
当我执行以下操作时:
output = `identify some_file`
output == "Output of identify"
Run Code Online (Sandbox Code Playgroud)
但当...
output = `identify non_existant_file`
output != "Error output of identify"
Run Code Online (Sandbox Code Playgroud)
如何获得系统调用的错误输出?
试试这个,打开控制台:
{} + 1
> 1
Run Code Online (Sandbox Code Playgroud)
和
({}) + 1
> "[object Object]1"`
Run Code Online (Sandbox Code Playgroud)
那鸭子在那里发生了什么?添加的额外括号是什么?
ruby ×8
activerecord ×1
angularjs ×1
arrays ×1
bash ×1
conventions ×1
debugging ×1
deployment ×1
formtastic ×1
inheritance ×1
javascript ×1
local ×1
locale ×1
methods ×1
mocking ×1
models ×1
nested ×1
node.js ×1
passenger ×1
polymorphism ×1
rest ×1
sails.js ×1
static ×1
stubbing ×1
subtraction ×1
system ×1
tags ×1
unit-testing ×1
variables ×1
web ×1