ruby-on-rails – FactoryGirl after_create方法不保存
发布时间:2020-12-17 03:30:48 所属栏目:百科 来源:网络整理
导读:我有一个简单的情境设置,以便学习FactoryGirl的测试.银行有很多交易.每次创建交易时,都应从银行总额中减去交易金额. 这是代码: # Bank.rb - Has many transactionsclass Bank ActiveRecord::Base has_many :transactionsend# Transaction.rb - Belongs to a
我有一个简单的情境设置,以便学习FactoryGirl的测试.银行有很多交易.每次创建交易时,都应从银行总额中减去交易金额.
这是代码: # Bank.rb - Has many transactions class Bank < ActiveRecord::Base has_many :transactions end # Transaction.rb - Belongs to a bank and should decrement the bank's total when created. class Transaction < ActiveRecord::Base belongs_to :bank after_create :decrement_bank_amount def decrement_bank_amount bank.decrement!(:amount,amount) if bank end end # factories.rb - Create default factories for testing. This is FactoryGirl 4 syntax FactoryGirl.define do factory :bank do sequence(:name) { |n| 'Bank ' + n.to_s } end factory :transaction do sequence(:title) { |n| 'Payment ' + n.to_s } bank end end # Transaction_spec.rb - Creates a bank and a transaction. require 'spec_helper' describe Transaction do describe ".create" do context "when a bank is set" do it "decreases the bank's amount" do bank = FactoryGirl.create(:bank,:amount => 1000) do |b| b.transactions.create(:amount => 250) end bank.amount.to_i.should eq 750 end end end end 测试保持失败,银行金额不断返回1000而不是预期的750.我很难过! 解决方法
此测试失败,因为银行从数据库中取出并存储. after_create回调修改数据库中的记录,但是bank中的对象看不到,因此不会更新.
在检查金额之前,您需要在该对象上调用reload: bank.reload bank.amount.to_i.should == 750 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- SAX解析XML模型
- c# – 这个API究竟是什么?它在做什么?
- ruby-on-rails – 如何确保黄瓜在步骤失败时停止执行?
- c# – 当ViewingMode设置为滚动时调整FlowDocumentReader的
- SAX解析xml学习之爬网工具
- 探究 C# 中的 char 、 string(一)
- ssh2与ajax结合之返回json数据异常:org.apache.struts2.js
- ruby-on-rails-3 – 设计 – 如果同一用户从其他浏览器/计算
- ### Error querying database. Cause: org.postgresql.util
- Swift - UIGestureRecognizer