我正在尝试为用户模型创建一个测试用例。基本上,它将验证first_name和last_name是否存在。我想做的是检查特定字段上的错误是否为空,并且应该为空。然而它总是失败。正确的做法是什么?这是我的代码在我的user_spec.rb上require'spec_helper'describeUserdobeforedo@user=User.newendit"musthaveafirstname"do@user.errors[:first_name].should_notbe_emptyendit"musthavealastname"do@user.errors[:last_name].
我有一个测试Controller的规范,如下所示require'spec_helper'describeProductsControllerdosetup:activate_authlogicdescribe"usernotloggedin"doit"shouldnotGETindex"doget:indexresponse.shouldredirect_to(login_path)endenddescribe"userloggedin"dobefore(:each)doUserSession.create:username=>"rohit",:password=>"test123"e
let的正常行为本质上是绑定(bind)到一个示例block(即它block)。这在大多数情况下都很好,但如果您碰巧在一个let中创建大型对象并用于多个实例,则可能会出现严重问题例子。在这种情况下,实例变量几乎成为测试套件完整性的必要条件。时间会这样复合:let=#在*对象创建时间调用的示例实例=对象创建时间在调用的示例数量超过3个的情况下,这个时间很快就会成为问题。大多数人会说使用实例变量是异端邪说,但就let的当前状态而言,这似乎是一种过于武断的胡言乱语,没有太多相反的研究。在我读过的任何支持let的文章中,唯一的论点是对延迟加载和作用域问题的一些吸引力,这两者在编写良好的测试中都
考虑以下几点:describeMyModeldocontext'updatesfields'dosubject{create(:my_model)}beforedosubject.savesubject.reloadendcontext'whenchangingfoo.bar'dobefore{subject.foo.bar=3}it{is_expected.tobe_multiple_bar}endcontext'whenchangingbaz.quux'dobefore{subject.baz.quux=3}it{is_expected.tobe_multiple_quux}end
我正在尝试通过命令行将几个变量传递给rake,以便在rspec中使用。据我所知,我可以这样做以将args传递到我的rake任务中:task:my_task,:arg1,:arg2do|t,args|puts"Argswere:#{args}"end但我使用的是rspec,所以我的rake任务看起来像这样:RSpec::Core::RakeTask.new(:my_task),:arg1,:arg2do|t,args|putsargs.arg1putsargs.arg2end这是行不通的。我还没有想出如何将它传递给我的rspec规范文件 最佳答案
我正在使用RubyonRails3.0.9和RSpec2。我知道使用RSpec和before_validation回调存在一些已知问题,因为before_validation在spec文件中运行时似乎不会被触发。您可以找到很多类似的问题(例如,通过执行Googlesearch)。我想知道目前是否有人想出了解决这个问题的方法?P.S.:我读到一些人建议使用模拟,其他人建议从before_validation切换到其他回调(例如:到before_save)或使用save(:validate=>false)方法(因此跳过验证)...等等...但似乎没有人解决了“真实”的问题。您认为在这种情况
本质上,我想创建一个程序来运行一些定义某些方法或类的不受信任的代码,然后针对它运行不受信任的rspec规范。我研究了一下Ruby沙盒,并且thisvideo来自rubyconf特别有帮助。在查看了几个解决方案之后,似乎最有帮助的两个是rubycop,它本质上对代码进行静态分析,而jrubysandbox(都包含在上面的视频中)。我的直觉告诉我,jruby沙箱可能更安全,但我很可能错了。这是我想做的一个完全不安全的例子:code=一切正常,但代码显然需要沙盒化。一些天才提交system("rm-rf/*")、forkwhilefork或其他同样危险的东西将是几分钟的事情。我对jrub
在我正在开发的Rails应用程序(在OS-X上)中,我发现通过rspec运行测试套件越来越频繁地锁定。它不会每次都发生。我试过在运行套件时添加--formatdocumentation以查看它是否每次都在同一个地方发生,但事实并非如此。我试过使用kill-9终止进程。然后它将名称更改为(ruby),进程状态为?E。这link建议进程被阻塞等待系统调用完成。每次发生这种情况时,我都必须重新启动我的机器才能终止此进程。我已经尝试重新安装rvm、ruby、mysql和imagemagick。这个项目正在使用imagemagick(通过mini_magick)gem,我怀疑它可能是导致rspe
我正在尝试使用辅助模块中的方法,但rspec似乎无法识别spec/features下测试的辅助程序。请注意,对spec_helper.rb的唯一更改是添加了require'capybara/rspec'。我尝试将helper.rb移动到spec/support、spec/helpers和spec/features(包含我的测试的目录),但没有运气。测试一直指示辅助方法未定义。让它“工作”的唯一方法是将我的测试移动到不同的目录,例如spec/integration。但是现在capybara将无法工作(访问未定义),因为它不在spec/features中。这是我的辅助模块(authenti
如何使用RSpec编写一组DRY的shared_examples并可用于正面和负面案例?适用于正面案例的shared_examples示例:shared_examples"group1"doit"canviewaperson'sprivateinfo"do@ability.shouldbe_able_to(:view_private_info,person)end#alsoimagineIhavemanyotherexamplesofpositivecaseshereend如果有与it_should_behave_like相反的东西,比如it_should_not_behave_lik