Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在RubyonRails应用程序中使用Rspec应该测试什么_Ruby On Rails_Ruby_Testing_Rspec_Tdd - Fatal编程技术网

Ruby on rails 在RubyonRails应用程序中使用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)

我是Rspec的初学者,实际上我们要求我对一些已经构建但从未测试过的方法进行Rspec测试(他们在构建方法之前不编写测试)

现在我正努力想知道如何测试我的方法,下面是一个例子:

 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
,并返回所需内容。然后您将确保正确调用了该方法。