0

请原谅这里的 Rails,RSpec 新手问题。

我正在尝试使用 RSpec 来测试我在文件中创建的类中的方法app/workers/myworker.rb。像这样的东西:

class MyWorker
   include SuckerPunch::Worker

   def perform(user_id)
     do_stuff(user_id)
     #etc
   end

   def do_stuff(user_id)
     # do stuff
   end
end

我有一个规范文件spec/workers/myworker_spec.rb,如下所示:

require 'spec_helper'

describe MyWorker do
  describe "do_stuff method" do
    test = do_stuff(3)
  end
end

我越来越undefined method 'do_stuff' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_2:0x007fef211b7840>

关于如何包含此类MyWorker及其方法以便我可以使用 RSpec 测试它们的任何提示?

谢谢。

4

3 回答 3

2

从您提供的代码中,没有requireor require_relativeof app/workers/myworker.rb,并且“测试”不在example group中。

在这些东西在那里之前,您可能遇到的任何其他问题都是没有实际意义的。


使用上面使用的样式,您会得到一个隐含的主题:

describe MyWorker do
  # subject { MyWorker.new } # this is not needed, and is kept in `subject`
  describe "do_stuff method" do
    it { should do_stuff(3) }  # but `subject` doesn't need to be used when it's implicit.
  end
end

然而,这仍然不像一个真正的规范,它可能应该更像这样:

describe MyWorker do
  let(:worker){ MyWorker.new }
  describe "do_stuff method" do
    subject { worker.do_stuff(3)}
    it { should_not be_nil }
    its(:total) { should == 12 }
  end
end

类似的东西。请参阅文档此博客文章。您仍然需要将测试放在示例组中。当您这样做时,您将免费获得subject(即worker在您的答案中)。

于 2013-04-23T01:04:33.433 回答
1

哇。答案很明显。

我一直假设app/workers/myworker.rb需要以某种方式要求它,但真正的问题只是我没有实例化我的类。

describe MyWorker do
  describe "do_stuff method" do
    worker = MyWorker.new
    test = worker.do_stuff(3)
  end
end

这行得通。

于 2013-04-23T02:07:14.737 回答
0

你错do了,在describe MyWorker字符串:

require 'spec_helper'

describe MyWorker do
  describe "do_stuff method" do
    test = do_stuff(3)
  end
end
于 2013-04-23T01:15:10.673 回答