在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在很多时候,我们的程序和实际的环境有依存关系,比如现在的购物车,在汇款,结账的时候要接入网络上的银行账号,这样就造成了我们测试的时候必须要有internet环境。比如,我们在model目录里创建了一个payment_gateway.rb来处理网络银行相关的操作,我们在store_control.rb的save_order方法里这样写: gateway = PaymentGateway.new response = gateway.collect(:login => 'username', :password => 'password', :amount => cart.total_price, :card_number => @order.card_number, :expiration => @order.card_expiration, :name => @order.name) 我们在gateway的collect方法中使用银行账号的用户名,密码等信息,但是这样一来,我们在测试的时候必须具有真实的internet环境,并且,我们不想在每次运行测试的时候都真正得去操作银行账户。 所以,我们需要的是一个假对象(mock)或PaymentGateway的一个替代品,在这里,rails为我们提供了方便,我们所要做的就是在test/mock/test/目录下创建一个payment_gateway.rb文件,用来覆盖app/models目录下的payment_gateway.rb,要注意,这两处的文件名必须完全一致。Mock文件的内容: require 'models/payment_gateway' class PaymentGateway def collect(request) # I'm a mocked out method :success end end 这意味着我们用mock对象替代了真实的models目录下的PaymentGateway,而collect方法也返回一个假的响应。 在测试的时候,Rails会先到mock对象所在的目录查找,这样,加载的就是mock目录下的类,而不是真实的models目录下的类。 这样,通过使用mock对象,我们可以将精力放在重要的,优先级高的测试上,rails让这些工作变得简单。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论