我正在编写测试并且为我必须引发异常以获得回滚这一事实而烦恼。raiseActiveRecord::Rollback我为此烦恼的原因是因为我需要回滚以保持我的数据库干净以供下一次测试运行。没有异常事件。这违背了不应预期异常的想法。除此之外,异常(exception)情况代价高昂。那么,是否还有其他回滚方式,或者我的担忧是否合理(如果是,请解释原因)?我忘了说我的应用是一个使用ActiveRecord和迷你测试的Sinatra应用。 最佳答案 总的来说,我认为您的担忧是合理的。在大多数情况下,异常是代价高昂的,不应被期望。但是,根据do
当使用ActiveRecord在RubyonRails2.3中运行RSpec测试时,数据库会回滚到每个示例之后的before:allblock之后的状态(itblock).但是,我想说明一个对象的生命周期,这意味着一个一个地检查大量示例,更改状态并测试后置条件。这对于回滚行为是不可能的。所以澄清一下:describeMyModelbefore:all{@thing=MyModel.create}it"shouldbesettable"dolambda{@thing.a_number=42}.should_notraise_exceptionendit"shouldrememberthi
我有这个领域模型:一个用户有一组项目,项目的状态可能无法通过验证。验证工作正常,我什至看到在我使用save!时调用了异常。在我的Controller中,我有这个:@user.items(){},:status=>:okelserender:json=>{:status=>:error,:errors=>item.errors},:status=>:bad_requestend第一次POST成功了,第二次POST失败了,但是打到索引的时候,还是看到了两个对象,就好像第二次事务没有回滚一样。这是怎么回事?我的测试是这样的:post:createpost:createget:indexAct
我对ruby和rails还很陌生,刚刚开始了解迁移。我的问题是在回滚后删除迁移的最佳做法或正确时间是什么。到目前为止,我所读到的是关于是否在回滚后删除迁移的意见,但是在团队中工作时删除迁移是否有任何重大影响,保留迁移文件有什么好处而不是删除是吗?就我而言,什么最有意义?我有我的原始迁移文件20140731141350_create_users.rbclassCreateUsers我需要向其中添加一个salt列,因此我创建了迁移20140804125449_add_salt_colum_to_users.rbclassAddSaltColumToUsers但在开发过程中我意识到sal
所以我不能说得太具体,但我想我能告诉你的就足以解决这个问题。首先,我使用gorp进行设置并获取交易。我正在使用github.com/denisenkom/go-mssqldb驱动程序。然后我运行一系列操作,如果其中一个操作失败,我rollback,如果都成功,我commit。问题是它只是回滚失败的语句,而不是其余的操作。我错了,这不是应该的工作方式吗?这里有一些粗略的伪代码,可以让你更好地理解我在说什么:trans,err:=dbmap.Begin()//assumeallerrorsarereceivedandcheckedbeforecontinuingid:=trans.Exec
所以我不能说得太具体,但我想我能告诉你的就足以解决这个问题。首先,我使用gorp进行设置并获取交易。我正在使用github.com/denisenkom/go-mssqldb驱动程序。然后我运行一系列操作,如果其中一个操作失败,我rollback,如果都成功,我commit。问题是它只是回滚失败的语句,而不是其余的操作。我错了,这不是应该的工作方式吗?这里有一些粗略的伪代码,可以让你更好地理解我在说什么:trans,err:=dbmap.Begin()//assumeallerrorsarereceivedandcheckedbeforecontinuingid:=trans.Exec
我成功地将这个注解用于一个Dao类。回滚适用于测试。但现在我需要回滚真实代码,而不仅仅是测试。有用于测试的特殊注释。但是哪些注解是针对非测试代码的呢?对我来说这是一个很大的问题。我已经为此花了一天时间。官方文档不符合我的需求。classMyClass{//thisdoesnotmakerollback!AndrecordappearsinDB.EmployeeDaoInterfaceemployeeDao;publicMyClass(){ApplicationContextcontext=newClassPathXmlApplicationContext(newString[]{"Hi
我成功地将这个注解用于一个Dao类。回滚适用于测试。但现在我需要回滚真实代码,而不仅仅是测试。有用于测试的特殊注释。但是哪些注解是针对非测试代码的呢?对我来说这是一个很大的问题。我已经为此花了一天时间。官方文档不符合我的需求。classMyClass{//thisdoesnotmakerollback!AndrecordappearsinDB.EmployeeDaoInterfaceemployeeDao;publicMyClass(){ApplicationContextcontext=newClassPathXmlApplicationContext(newString[]{"Hi
我在@Transactional方法中提交事务时遇到问题:methodA(){methodB()}@TransactionalmethodB(){...em.persist();...em.flush();log("OK");}当我从methodA()调用methodB()时,该方法成功通过,我可以在日志中看到“OK”。但后来我得到了CouldnotcommitJPAtransaction;nestedexceptionisjavax.persistence.RollbackException:TransactionmarkedasrollbackOnlyorg.springframe
我在@Transactional方法中提交事务时遇到问题:methodA(){methodB()}@TransactionalmethodB(){...em.persist();...em.flush();log("OK");}当我从methodA()调用methodB()时,该方法成功通过,我可以在日志中看到“OK”。但后来我得到了CouldnotcommitJPAtransaction;nestedexceptionisjavax.persistence.RollbackException:TransactionmarkedasrollbackOnlyorg.springframe