首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails规范,用于简单的sidekiq删除工作人员传真

Rails规范,用于简单的sidekiq删除工作人员传真
EN

Stack Overflow用户
提问于 2019-09-13 07:53:26
回答 2查看 147关注 0票数 1

我有个很简单的帮手,我不知道为什么不起作用。我想可能是因为规格。

worker

代码语言:javascript
运行
复制
class AdminPanelLogRemoverWorker
  include Sidekiq::Worker

  def perform
    expired_logs = AdminPanelLog.where('created_at > ?', 1.year.ago)
    expired_logs.delete_all
  end
end

specs

代码语言:javascript
运行
复制
require 'rails_helper'

describe AdminPanelLogRemoverWorker do
  include_context 'with admin_user form'

  subject { described_class.new.perform }

  let!(:admin_panel_log1) do
    create :admin_panel_log,
    action_type: 'Update',
    old_data: admin_user_form,
    created_at: 2.years.ago
  end
  let!(:admin_panel_log2) do
    create :admin_panel_log,
    old_data: admin_user_form,
    created_at: 2.days.ago
  end

  context 'when admin log is outdated' do
    it 'calls remover worker' do
      expect(AdminPanelLog.count).to eq(1)
    end
  end
end

admin_panel_log1admin_panel_log2是对应的模型AdminPanelLog,它的形式正确(也许我应该避免let! ?)。结果,规范失败,出现错误。

失败/错误: expect(AdminPanelLog.count).to eq(1)预期:1 got: 0(使用==进行比较)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-13 08:31:35

我刚刚用

代码语言:javascript
运行
复制
RSpec.describe TestController, type: :controller do

    subject { User.new }

    let!(:test) do
      p subject
      p "dfvb"
    end

    it 'testing order of let and subject' do 
      # Spec
     end
end

在调用subject块之前初始化let!。因此,在您的示例中,在作业运行时甚至没有创建lo AdminPanelLog。所以这个例子失败了。

代码语言:javascript
运行
复制
context 'when the admin log is outdated' do
    it 'calls remover worker' do
      subject.new.perform #Perform the job here or after the initialization of AdminPanelLog 
      expect(AdminPanelLog.count).to eq(1)
    end
  end

并删除此subject { described_class.new.perform },因为主题本身将保存当前类的值。

票数 1
EN

Stack Overflow用户

发布于 2019-09-13 14:20:24

正如Aarthi回答中已经显示的那样,问题是您没有调用subject,所以代码没有被执行,您的工作人员也没有被调用。尽管如此,我还是会通过以下几点改进答案

代码语言:javascript
运行
复制
context 'when admin log is outdated' do
    it 'remover worker deletes them' do
      expect { subject }.to change(AdminPanelLog, :count).by(-2) #or whatever the amount is
    end
  end

上面的测试允许您检查工人是否确实完成了删除内容的工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57919456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档