因此,我有以下几行代码要用RSpec进行模拟测试。
class BaseService
MAX_BODY_SIZE = 100000.freeze
def translate(body, language, account)
return body if body.blank?
translate_body_in_chunks(body, language, account) if body.size > MAX_BODY_SIZE
end
def translate_body_in_chunks(body, language, account)
# some API call that I don't want to call while testing
end
end
我想测试是否正在调用translate_body_in_chunks
。
迄今为止的RSpec实施
body = 'a' * 10000000
mock = double(described_class)
allow(mock).to receive(:translate).with(body, 'en', '')
expect(mock).to receive(:translate_body_in_chunks)
我知道这个测试不起作用。我只是把它添加到这里,给你一个关于我想测试什么的提示。
这样的东西应该可以工作:
describe BaseService do
describe '#translate' do
context 'with a body exceeding MAX_BODY_SIZE' do
let(:body) { 'a' * (BaseService::MAX_BODY_SIZE + 1) }
it 'calls translate_body_in_chunks' do
expect(subject).to receive(:translate_body_in_chunks)
subject.translate(body, 'en', '')
end
end
end
end
subject
是指通过BaseService.new
创建的实例。
请注意,一般情况下,您不应该测试方法的实现的详细信息。相反,请尝试测试该方法的行为。