模型方法在浏览器中有效,但在FactoryGirl Rails中不起作用



以下方法在浏览器中工作正常。它所做的只是将所有关联的交易,并将它们的总金额相加。

钱包.rb

has_many :transactions
# Sums the transaction amounts together
def total_spent
  transactions.map(&:amount).sum
end

工厂.rb

FactoryGirl.define do
    # Create a wallet
    factory :wallet do
        title 'My wallet'
    end
    # Create a single transaction
    factory :transaction do
        association :wallet
        title 'My transaction'
        amount 15
    end
end

wallet_spec.rb

it "should get the sum of the transactions" do
  transaction = FactoryGirl.create(:transaction)
  wallet = transaction.wallet
  wallet.total_spent.should eq 15
end

测试一直失败。我收到 0,但预计 15 是正确的金额。同样,这在浏览器中工作正常!

跑轨 3.2, 工厂女孩 4.2

FactoryGirlassociation识别为某种函数。因此,您在上面所做的是创建一个包含属性 transaction.association 等于 :wallet 的事务。

如果您只是将其声明为 wallet那么您的事务将使用通过Wallet工厂创建的关联Wallet构建。

不过,在定义工厂时需要小心,不要在每个方向上建立关联,因为您很容易陷入无限循环。

以下是有关FactoryGirl的文档,如果您需要更多复习:

https://github.com/thoughtbot/factory_girl/wiki/Usage

至于您的问题,我建议不要依赖FactoryGirl中定义的值来进行测试。工厂的存在是为了更快地定义默认值以通过某些验证检查。不过,您不应该真正基于这些默认值进行测试。我会推荐类似以下测试的东西:

it "should get the sum of the transactions" do
  wallet = FactoryGirl.create(:wallet)
  wallet.transactions << FactoryGirl.create(:transaction, amount: 15)
  wallet.transactions << FactoryGirl.create(:transaction, amount: 10)
  wallet.total_spent.should eq 25
end

我希望这有所帮助。

相关内容

  • 没有找到相关文章