gateway = PaymentGateway.
response = gateway.collect(:login => 'username',
:password => 'password',
:amount => cart.total_price,
:card_number => @order.card_number,
:expiration => @order.card_expiration,
:name => @order.name)
我们在gatewaycollect思路方法中使用银行账号用户名密码等信息但是这样来我们在测试时候必须具有真实ernet环境并且我们不想在每次运行测试时候都真正得去操作银行账户
所以我们需要是个假对象(mock)或PaymentGateway个替代品在这里rails为我们提供了方便我们所要做就是在test/mock/test/目录下创建个payment_gateway.rb文件用来覆盖app/models目录下payment_gateway.rb要注意这两处文件名必须完全致Mock文件内容:
require 'models/payment_gateway'
PaymentGateway
def collect(request)
# I'm a mocked out method
:success
end
end
这意味着我们用mock对象替代了真实models目录下PaymentGateway而collect思路方法也返回个假响应
在测试时候Rails会先到mock对象所在目录查找这样加载就是mock目录下类而不是真实models目录下类
这样通过使用mock对象我们可以将精力放在重要优先级高测试上rails让这些工作变得简单
最新评论