RSpec测试方法是否在方法内部调用



因此,我有以下几行代码要用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创建的实例。

请注意,一般情况下,您不应该测试方法的实现的详细信息。相反,请尝试测试该方法的行为

相关内容

  • 没有找到相关文章

最新更新