Ruby on rails 在RubyonRails应用程序中使用Rspec应该测试什么
我是Rspec的初学者,实际上我们要求我对一些已经构建但从未测试过的方法进行Rspec测试(他们在构建方法之前不编写测试) 现在我正努力想知道如何测试我的方法,下面是一个例子:Ruby on rails 在RubyonRails应用程序中使用Rspec应该测试什么,ruby-on-rails,ruby,testing,rspec,tdd,Ruby On Rails,Ruby,Testing,Rspec,Tdd,我是Rspec的初学者,实际上我们要求我对一些已经构建但从未测试过的方法进行Rspec测试(他们在构建方法之前不编写测试) 现在我正努力想知道如何测试我的方法,下面是一个例子: class ConnectorJob < ActiveJob::Base queue_as :connector def perform(tenant_id = nil, debug = false) tenant_to_sync = Tenant.to_sync(tenant_id)
class ConnectorJob < ActiveJob::Base
queue_as :connector
def perform(tenant_id = nil, debug = false)
tenant_to_sync = Tenant.to_sync(tenant_id)
return if tenant_to_sync.empty?
tenant_to_sync.each do |tenant|
service = MyAPP::ContactToSync.new(tenant, debug).call
if service.success?
ConnectorService::Synchronization.new(
tenant, service.data, debug
).call
end
end
end
end
正如你所看到的,我的上一次测试没有意义,但是我不知道我应该在我的Rspec上写些什么来预测这个方法的结果
如果我检查我的Rspec覆盖率,Rspec会告诉我我覆盖了100%的方法,但我不确定这是否正确
我希望我很清楚,请随意问我更多细节
谢谢大家我想你们应该测试一下最终结果,我是说打电话后的结果
ConnectorService::Synchronization.new(…)。调用
并测试三种情况,例如,如果此调用创建了新用户,则应测试它:
如果tenant\u to\u sync.empty?==正确
context 'with empty tenant' do
it { expect(ConnectorJob.new.perform(@tenant.id)).to change(User.count).by(0) }
end
context 'success' do
it { expect(ConnectorJob.new.perform(@tenant.id)).to change(User.count).by(1) }
end
如果service.success?==错误
context 'MyAPP::ContactToSync return false' do
it { expect(ConnectorJob.new.perform(@tenant.id)).to change(User.count).by(0) }
end
如果service.success?==正确
context 'with empty tenant' do
it { expect(ConnectorJob.new.perform(@tenant.id)).to change(User.count).by(0) }
end
context 'success' do
it { expect(ConnectorJob.new.perform(@tenant.id)).to change(User.count).by(1) }
end
它应该足以涵盖所有场景。您好,谢谢您的回答。但我不知道如何测试最终结果。最终的结果应该是一个结构,但是我如何在我的方面创建正确的结构,正如我在示例中所示,我做了
expect(perform)。要eq job
但是job
与perform
相同,因此我认为这没有意义,因为即使方法不正确,它也会相等。@Imnotgood,您可以在测试之前使用stub方法ConnectorService::Synchronization.new
,并返回所需内容。然后您将确保正确调用了该方法。