Tôi đang sử dụng Rails 5 với Rspec 3. Làm cách nào để giả lập một lớp trong phương thức Rspec của tôi? Tôi có lớp sauLàm cách nào để giả lập một lớp bằng Rspec và Rails?
require 'rails_helper'
describe CryptoCurrencyService do
describe ".sell" do
it "basic_sell" do
last_buy_price = 3000
last_transaction = MoneyMakerTransaction.new({
:transaction_type => "buy",
:amount_in_usd => "100",
:btc_price_in_usd => "#{last_buy_price}"
})
@client = Coinbase::Wallet::Client.new(api_key: ENV['COINBASE_KEY'], api_secret: ENV['COINBASE_SECRET'])
sell_price = 4000
assert sell_price > last_buy_price * (1 + MoneyMakerThreshhold.find_buy.pct_change)
allow(@client).to receive(:sell_price).and_return({"base"=>"BTC", "currency"=>"USD", "amount"=>"#{sell_price}"})
svc = CryptoCurrencyService.new
svc.sell(last_transaction)
last_transaction = MoneyMakerTransaction.find_latest_record
assert last_transaction.transaction_type, "sell"
end
end
end
Thay vì thực sự instantiating lớp "Coinbase :: Wallet" trong dòng
@client = Coinbase::Wallet::Client.new(api_key: ENV['COINBASE_KEY'], api_secret: ENV['COINBASE_SECRET'])
Tôi muốn tạo taht giả sau đó tôi có thể chèn vào lớp dịch vụ của tôi mà tôi đang thử nghiệm Vì nó đang đứng ngay bây giờ, khi tôi chạy mọi thứ, lớp cơ bản thực tế đang được khởi tạo, dẫn đến lỗi thời gian chạy ...
Bạn có ha da nhìn vào 'rspec-mocks' không? https://github.com/rspec/rspec-mocks –
Vâng, nhưng tôi không thấy anyting mà khá phù hợp với tình hình của tôi. – Dave