【发布时间】:2011-02-23 11:36:34
【问题描述】:
我正在尝试测试我的服务是否正确调用 Anemone.crawl。我有以下代码:
spider_service.rb
class SpiderService < BaseService
require 'anemone'
attr_accessor :url
def initialize(url)
self.url = url
end
def crawl_site
Anemone.crawl(url) do |anemone|
end
end
end
spider_service_spec.rb
require 'spec_helper'
require 'anemone'
describe SpiderService do
describe "initialize" do
let(:url) { mock("url") }
subject { SpiderService.new(url) }
it "should store the url in an instance variable" do
subject.url.should == url
end
end
describe "#crawl_site" do
let(:spider_service) { mock("spider service") }
let(:url) { mock("url") }
before do
SpiderService.stub(:new).and_return(spider_service)
spider_service.stub(:crawl_site)
Anemone.stub(:crawl).with(url)
end
subject { spider_service.crawl_site }
it "should call Anemone.crawl with the url" do
Anemone.should_receive(:crawl).with(url)
subject
end
end
end
这是我遇到的错误,但我无法理解,因为我可以在 Rails 控制台中调用该服务,并在提供有效 URL 时从 Anemone 获取数据:
Failures:
1) SpiderService#crawl_site should call Anemone.crawl with the url
Failure/Error: Anemone.should_receive(:crawl).with(url)
(Anemone).crawl(#<RSpec::Mocks::Mock:0x82bdd454 @name="url">)
expected: 1 time
received: 0 times
# ./spec/services/spider_service_spec.rb:28
请告诉我我忘记了一些愚蠢的事情(那我可以责怪缺乏咖啡,而不是普遍的无能!)
感谢您的宝贵时间,
Gav
【问题讨论】:
-
顺便说一句,这个问题与 Rails 无关。
标签: ruby-on-rails ruby rspec gem