我有一堆非常重复的rspec测试,它们都具有相同的格式:it"insertsthecorrectATTRIBUTE_NAME"do@o.ATTRIBUTE_NAME.shouldeql(VALUE)end如果我能像这样进行一行测试就好了:compare_value(ATTRIBUTE_NAME,VALUE)但是shoulda似乎并不适合这些类型的测试。还有其他选择吗? 最佳答案 有时我后悔将subject暴露为最终用户设备。引入它是为了支持扩展(如shoulda匹配器),因此您可以编写如下示例:it{shoulddo_somethi
有没有办法将长的RSpec行分成两行:expect(....).toeq(.....)?更新:现在我有一个错误:Failure/Error:expect(@query_builder.questions_from_time(@time_to_test)).toArgumentError:Theexpectsyntaxdoesnotsupportoperatormatchers,soyoumustpassamatcherto#to.如果我删除换行符,错误就会消失 最佳答案 to在技术上只是一种方法,但常见的风格是在rspec中省略to
我卡在了一个测试场景中。我有一个Controller方法:defupdate@object=Object.findparams[:id]#someotherstuff@object.saverescueActiveRecord::StaleObjectError#woootherstuffend我测试的第一部分:context'#update'let(:object){double}it'nothingfails'do#someotherstuffexpect(Object).toreceive(:find).with('5').and_return(object)expect(obj
目前正在使用Pusher和RSpec。Pusher.should_receive(:trigger).with('message',{:data=>'12345'})这会起作用,除了调用是Pusher['channel-id'].trigger...如何用RSpec模拟这个? 最佳答案 []是一个函数名,所以它可以被stub。在Pusher源代码中,您会看到:def_delegators:default_client,:webhook,:channel,:[]所以所有这些方法都被转发到default_client。所以这实际上是一个
我想测试将一个模块包含到一个类中。我正在尝试在RSpec中定义一个新类:describeStatusabledolet(:test_class)doclassModelIncludingStatusable我得到一个错误:TypeError:[ActiveModel::Validations::InclusionValidator]isnotaclass/module这可能是因为在Statusable中我有:validates_inclusion_of:status,:in=>statuses,:message=>"{{value}}долженбытьоднимиз:#{status
这是我的。还有那种工作。it"shouldfilterbyname"dousers=users.search(:name=>"s")users.each{|u|u.name.shouldbe_starts_with("s")}end不过rspec返回的错误信息真的很差...expectedstarts_with?("s")toreturntrue,gotfalse有没有办法获得更精确的消息,显示失败的元素,或者至少是它的索引? 最佳答案 在这样的二进制测试中,我会创建两个用户,一个以s开头,另一个不带。然后我会检查是否只返回了预期的
我收到一个错误消息,指出此方法不存在,但这看起来相当基本,我不确定为什么会收到此错误消息?it{shouldvalidate_presence_of:role}#ThisisOK.Failure/Error:it{shouldvalidate_inclusion_of:role,:in=>%w[onetwothree]}NoMethodError:undefinedmethod`validate_inclusion_of'for#对于代码:classUser[one,twothree]]http://apidock.com/rails/ActiveModel/Validations/C
运行我们的rspec测试套件时bundleexecrspecspec/日志中充斥着许多日志语句。特别是,Controller规范多次显示这样的内容:{"controller"=>"myController","action"=>"create"}我想摆脱这些但找不到来源。没有puts语句匹配这样的任何东西,也没有任何Rails.logger调用。我假设这是一个日志级别问题,但我可能是错的。在environment/test.rb中设置config.log_level没有效果。当前的rspec配置如下所示RSpec.configuredo|config|config.includeDev
我在http://railscasts.com/episodes/257-request-specs-and-capybara看到了railscast其中描述了如何在Rails应用程序上使用Capybara和RSpec。是否可以使用Capybara/Selenium来测试您无法访问其代码的Web应用程序,或者它不是Ruby/Rack应用程序。换句话说,是否可以使用Capybara/Selenium对Web应用程序进行黑盒测试?如果是,怎么办?我问是因为所有代码示例都暗示存在Ruby或Rails代码库。 最佳答案 我看不出任何不可能的
我遇到了测试错误代码的问题。如果未找到记录,则会引发异常ActiveRecord::RecordNotFound。问题是,我想检查是否返回404。如果我继续检查:response.status.should==404然后这将使测试用例失败,因为RecordNotFound异常被抛出但未被捕获。如果我继续说expect{}.toraise_error(ActiveRecord::RecordNotFound)然后检查状态码,然后它会再次失败,因为它捕获了异常并且响应码是200。这种情况应该如何测试是否返回404? 最佳答案 如果您不想