我有一个属于一个组的用户模型.组必须具有唯一的名称属性.用户工厂和组工厂定义为:
Factory.define :user do |f|
f.association :group, :factory => :group
# ...
end
Factory.define :group do |f|
f.name "default"
end
Run Code Online (Sandbox Code Playgroud)
创建第一个用户时,也会创建一个新组.当我尝试创建第二个用户时,它失败了,因为它想要再次创建相同的组.
有没有办法告诉factory_girl关联方法首先查看现有记录?
注意:我确实尝试定义一个方法来处理这个,但后来我不能使用f.association.我希望能够在像这样的Cucumber场景中使用它:
Given the following user exists:
| Email | Group |
| test@email.com | Name: mygroup |
Run Code Online (Sandbox Code Playgroud)
这只有在工厂定义中使用关联时才有效.
在我的测试中,我想为任何类的实例存根固定响应.
它可能看起来像:
Book.stubs(:title).any_instance().returns("War and Peace")
Run Code Online (Sandbox Code Playgroud)
然后,每当我打电话,@book.title它就会返回"战争与和平".
有没有办法在MiniTest中执行此操作?如果是的话,你能给我一个示例代码片段吗?
或者我需要像摩卡这样的东西?
MiniTest确实支持Mocks,但Mocks对于我需要的东西来说太过分了.
``Backtick%x{}百分比X <Backtick的替代语法system()fork()open()IO.popen()<表现相同open()open("|-")IO.popen("-")<表现相同open("|-")Open3.popen3()require 'open3'PTY.spawn()require 'pty'Shell.transact()require 'shell'编辑1. 非常感谢Avdi Grimm的帖子描述了每种方法的示例用法:#1(&gist); #2(&gist); #3.
他们是很好的资源来回答如何,但没有明确的组成来回答每个应该使用或为什么,并因此恕我直言这个问题不完整的答案.
如果它们不是空的,我只需要验证一些属性.
例如,用户可以具有徽标.如果我们尝试加载它 - 验证应该有效.如果我们只是更新没有徽标的用户数据,则必须跳过验证.
我现在有:
表单可以选择两个文件.一个 - 徽标,第二个 - 头像.这两个属性都是User模型的一部分.在用户模型中,有一个验证:
validates_preference_of :logo_file_name, :message=>I18n.t("...")
validates_format_of :logo_file_name, :with=>/\.(jpeg|jpg|png|gif)$/i, :message=> I18n.t("...")
validates_preference_of :avatar_file_name, :message=>I18n.t("...")
validates_format_of :avatar_file_name, :with=>/\.(jpeg|jpg|png|gif)$/i, :message=> I18n.t("...")
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果我们尝试创建没有选择徽标和头像的新用户,我们将会出现错误(我们的验证).我尝试了更改验证并添加":on =>:update",如下所示:
validates_preference_of :logo_file_name, :message=>I18n.t("..."), :on => :update
validates_format_of :logo_file_name, :with=>/\.(jpeg|jpg|png|gif)$/i, :message=> I18n.t("..."), :on => :update
validates_preference_of :avatar_file_name, :message=>I18n.t("..."), :on => :update
validates_format_of :avatar_file_name, :with=>/\.(jpeg|jpg|png|gif)$/i, :message=> I18n.t("..."), :on => :update
Run Code Online (Sandbox Code Playgroud)
现在我可以创建没有选择徽标和头像的用户,但如果我尝试编辑用户并尝试上传只有徽标 - 我有头像的验证错误.如果我选择文件的头像和徽标留空 - 我有徽标验证错误.
我如何运行验证ony我想要更改的属性?
我正在Windows机器上设置RoR开发环境.我想知道如何设置它,以便我的一些朋友可以访问Web服务器并监控进度?
在任何时间最多只能连接2或3个人.
更新到Mountain Lion后,我尝试安装1.8.7,然后出错了.找不到X11文件,我安装了Xquarkz,但没有任何改变.怎么了?
Fail to find [tclConfig.sh, tkConfig.sh]
Use MacOS X Frameworks.
Find Tcl/Tk libraries. Make tcltklib.so which is required by Ruby/Tk.
clang -I. -I../.. -I../../. -I../.././ext/tk -DHAVE_RB_SAFE_LEVEL -DHAVE_RB_HASH_LOOKUP -DHAVE_RB_PROC_NEW -DHAVE_RB_OBJ_TAINT -DHAVE_ST_PTR -DHAVE_ST_LEN -DRUBY_VERSION=\"1.8.7\" -DRUBY_RELEASE_DATE=\"2012-06-29\" -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -DWITH_TCL_ENABLE_THREAD=0 -fno-common -g -O2 -fno-common -pipe -fno-common -c stubs.c
In file included from stubs.c:10:
/usr/include/tk.h:78:11: fatal error: 'X11/Xlib.h' file not found
# include <X11/Xlib.h>
^
1 error generated.
make[1]: *** [stubs.o] Error 1
make: *** [all] Error 1
Run Code Online (Sandbox Code Playgroud) 我想知道如何使用Homebrew 更新到最新的稳定版Ruby.我对使用RVM 不感兴趣.谢谢.
典型的RSpec单元测试广泛使用嵌套的Ruby块,以便构造代码并利用DSL"魔力"将规范读取为BDD语句:
describe Foo do
context "with a bar" do
before :each do
subject { Foo.new().add_bar }
end
it "looks like a baz" do
expect # etc
Run Code Online (Sandbox Code Playgroud)
在理想规范中,每个示例可以相对较短且精确.然而,似乎通常将外部块增加到100行以上,因为RSpec结构以这种方式工作,并且不需要许多规范示例,每个示例可能具有几行特定设置,以获得describe块,即与所描述的主题的代码相同或更大.
Rubocop最近的一次升级带来了新的规则,即块不应超过25行.我不确定它的基本原理,因为它没有在Ruby样式指南中列出.我可以看到为什么它可能是一件好事,并添加到默认规则集.但是,在升级之后,我们的Rubocop测试会多次失败并显示消息tests/component_spec.rb:151:3: C: Block has too many lines. [68/25]
使用代码度量工具(如Rubocop),我喜欢使用"使用默认值,链接到样式指南,完成工作"的策略.(主要是因为辩论标签与空格和其他细节是浪费时间,IME 永远不会得到解决)这显然是不可能的,我们的两个核心数据质量工具不同意代码布局方法 - 或者至少我是如何解释结果的,我没有看到我们如何编写规范本质上有任何错误.
作为回应,我们只是将Rubocop块大小规则设置为高阈值.但这让我想知道 - 我错过了什么?RSpec是否使用了现在已经失去信誉的代码布局方法,以及我在RSpec测试中减少块大小的合理选择是什么?我可以看到重构代码以避免大块的方法,但它们毫无例外地纯粹是为了满足Rubocop规则的丑陋黑客,例如将所有块分解为辅助函数:
def looks_like_a_baz
it "looks like a baz" do
expect # etc
end
end
def bar_context
context "with a bar" do
before :each do
subject { Foo.new().add_bar }
end …Run Code Online (Sandbox Code Playgroud) 我正在执行以下脚本:
gem install rdoc --no-document
gem install bundle
bundle
Run Code Online (Sandbox Code Playgroud)
输出:
+ gem install rdoc --no-document
Successfully installed rdoc-6.1.1
1 gem installed
+ gem install bundle
Successfully installed bundle-0.0.1
Parsing documentation for bundle-0.0.1
Done installing documentation for bundle after 2 seconds
1 gem installed
1 gem installed
+ bundle install
/usr/lib/ruby/2.5.0/rubygems.rb:289:in `find_spec_for_exe': can't find gem bundler (>= 0.a) with executable bundle (Gem::GemNotFoundException)
from /usr/lib/ruby/2.5.0/rubygems.rb:308:in `activate_bin_path'
from /srv/myuser/.gem/ruby/2.5.0/bin/bundle:23:in `<main>'
Run Code Online (Sandbox Code Playgroud)
我添加/srv/myuser/.gem/ruby/2.5.0/bin到我的路径,所以我能够安装宝石.
该gem env节目
RubyGems Environment:
- RUBYGEMS VERSION: 2.7.7 …Run Code Online (Sandbox Code Playgroud) ruby ×10
bundle ×1
bundler ×1
coding-style ×1
cucumber ×1
enumerable ×1
factory-bot ×1
homebrew ×1
macos ×1
minitest ×1
performance ×1
rspec ×1
rubocop ×1
rubygems ×1
rvm ×1
standards ×1
stub ×1
subprocess ×1
validation ×1
x11 ×1