- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想测试一些 resque 工作人员,以及将工作与这些工作人员一起排队的操作。我正在使用 rspec 和 rails。
目前我有一个模型,我们称之为 Article.rb,它有一个名为 updates_related_categories 的 before_save 方法,用于检查是否需要将具有 CategoriesSorter 的作业加入队列。如果是这样,它将与该工作人员一起排队工作,并使用与文章相关的类别 id 的参数。
然而,在测试中,这些作业被发送到与开发服务器发送作业相同的队列中。 (我使用 resque 服务器进行检查,您可以在 root/redis/overview 中绑定(bind)到您的服务器)
我想知道:
1) 如何将测试作业发送到与开发作业不同的队列?
如果可能的话,也欢迎任何其他关于测试 resque 的建议。
我看到了一些相关的问题,建议使用 resque-unit 和 resque-spec,但这些问题还很不完善,我无法让它们进入有用的工作状态。另外,我听说过使用 Resque.inline,但我不知道这在这种情况下是否相关,因为在测试规范中没有调用 resque,它是在保存测试中创建的对象的文章模型中调用的。
示例代码:
文章.rb:
before_save :update_related_categories
def update_related_categories
#some if statements/checks to see if a related category needs updating
Resque.enqueue(CategoriesWorker, [category_id])
end
end
分类排序器:
class CategoriesSorter
@queue=:sorting_queue
def self.perform(ids)
ids.each do |id|
#some code
end
end
end
规范:
it "should do something" do
@article = #set something to enqueue a job
@article.save
#can i check if a job is enqueued? can i send this job NOT to the development queue but a different one?
end
最佳答案
在我看来,您不想测试将作业入队是否会导致调用执行 - 我们相信 Resque 会做它应该做的事情。但是,您可以测试 1. 调用 update_related_categories 将作业排入队列。然后,您可以单独测试 2. 调用 perform 的工作人员是否会产生所需的行为。
对于一般的 Resque 测试,结合 resque-spec 和模拟 worker 可以实现上述两个目标。
对于1,使用resque-spec,你可以模拟一个worker在你的类上调用perform方法,然后检查它是否已经正确入队:
describe "Calling update_related_categories " do
before(:each) do
ResqueSpec.reset!
end
it "should enqueue the job" do
Article.update_related_categories
CategoriesSorter.should have_queue_size_of(1)
end
end
对于 2,您可以创建一个 Job(并指定一个与开发队列不同的队列名称)、一个 Resque::Worker,然后将 Worker 分配给 Job:
def run_worker_simulation
# see Resque::Job api for setting the args you want
Resque::Job.create('test_queue_name', 'class_name', 'type', 'id')
worker = Resque::Worker.new('test_queue_name')
worker.very_verbose = true
job = worker.reserve
worker.perform(job)
end
希望能给你一些想法。
关于ruby-on-rails - 测试 Resque 时如何区分测试队列和真实队列(使用 rspec 和 rails?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13261986/
我正在寻找x86 Assembly中pow(real, real)的实现。我也想了解算法的工作原理。 最佳答案 只需将其计算为2^(y*log2(x))即可。 有一个x86指令FYL2X计算y *
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
风格指南的最后一点 http://www.python.org/dev/peps/pep-0008 读... 不要使用 == 将 bool 值与 True 或 False 进行比较。 为什么? 编辑只
我似乎无法完成这件事。我仍然在我的日志中看到 cloudflare IP。目前,我有一个负载均衡器,它位于 Cloudflare 后面。 目前,这是与 forwardfor 相关的块: opt
此代码行选择任何类名不是“id”和“quantity”的 div 内的所有子输入:: $("div.item > div:not(.id,.quantity) > :input").live("key
我在测试真实产品时遇到错误。当我单击购买按钮时,出现错误“此版本的应用程序未配置为市场计费”。 我用这个例子https://github.com/robotmedia/AndroidBillingLi
到目前为止我能找到的所有答案都建议调用 omp_set_num_threads。虽然在大多数情况下这是一个正确的答案,但它对我不起作用。在内部,调用 omp_set_num_threads 会导致创建
假设我有 3 个显示器。如何仅通过其索引获取第二个句柄? EnumDisplayMonitors() 不会工作,因为它也枚举了伪设备,而 EnumDisplayDevices() 没有给我句柄。 最佳
我一直在尝试制作一个简单的小游戏来测试我的逻辑,这是一个简单的迷宫,它很丑,而且到目前为止很糟糕。 引擎工作得很好,考虑到迷宫已经存在(矩阵),它甚至可以愉快,但我无意绘制一堆 map ,这可能是在
Cloudflare 代理包含一个名为 CF-Connecting-IP 的 header 和用户的真实 IP。我想让 traefik 读取这个 header 并用它的内容创建一个 X-Real-Ip
我想要上下文菜单中的不同菜单项,具体取决于我在 JTable 中单击的行 大多数示例并没有真正显示上下文菜单(应该根据上下文 - 所选行进行填充) 我尝试过这个: popupMenu = ne
我有一个对象 callInst。如何获取函数的真实名称而不是 IR 代码中的名称?如果我在我的通行证中运行此代码(Useless 在另一个问题中发布) StringRef get_function_n
我在 Appium 和 iPad 2 上使用了以下所需的功能 DesiredCapabilities capabilities = new DesiredCapabilities(); capabil
根据documentation 我们可以通过以下方式在模拟器上运行我们的 android 项目: cordova 运行 android 或 cordova emulate android 但是如何在真
在 ASP.NET 中,有没有办法获得真正的原始 URL? 例如,如果用户浏览到“http://example.com/mypage.aspx/%2F”,我希望能够获得“http://example.
我的 NSInputStream 遇到问题。这是我的代码: case NSStreamEventHasBytesAvailable: printf("BYTE AVAILABLE\n"
$(selector).click() 结果没有任何反应。 this answer在浏览器控制台中工作,javascript 上下文设置为 iframe,但不是主页: simulateMouseCli
我在我的 AB Micro820 PLC 中设置了 modbus 映射。我在 40001 中有一个数组用于写入,在 42001 中有一个数组用于读取。两者都是 200 个元素和 REAL 类型(32
我正在寻找有关设计契约(Contract)管理数据模型的建议。因此,合约的一般生命周期是: 契约(Contract)已创建并处于“草稿”状态。它可以在内部查看,并且可以进行更改。 契约(Contrac
我正在尝试让我的 WebView fullscreen 达到标准,我知道如何将它拉伸(stretch)到“全屏”,但我想做的是当您长按 WebView 并选择全屏选项时,创建全屏。有谁知道该怎么做?
我是一名优秀的程序员,十分优秀!