Rspec说没有实现实现的方法

时间:2013-02-27 04:04:04

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 rspec

下面是一个rspec测试我正在测试另一个我做过的课程。不幸的是,我试图测试的方法(delete)似乎不起作用。让我失望的是我从Termianl得到的错误信息是:

/Users/user/Ruby/localWikiClient/localwiki_client/spec/delete_spec:11:in 'block (2 levels) in <top (required)>': undefined method 'delete' for #<Proc:0x007fe4739a5448> (NoMethodError)

但是,此方法在类中定义。以下是代码:

require 'faraday'
require 'json/pure'

module Localwiki

  ##
  # A client that wraps the localwiki api for a given server instance
  #
  class Client

    attr_accessor :hostname       # hostname of the server we'd like to point at
    attr_reader   :site_name      # site resource - display name of wiki
    attr_reader   :time_zone      # site resource - time zone of server, e.g. 'America/Chicago'
    attr_reader   :language_code  # site resource - language code of the server, e.g. 'en-us'

    def initialize hostname, user=nil, apikey=nil
      @hostname = hostname
      @user = user
      @apikey = apikey
      create_connection
      collect_site_details
    end

   ##
   # Get site resource and set instance variables
   #
   def collect_site_details
       site = fetch('site','1')
       @site_name = site['name']
       @time_zone = site['time_zone']
       @language_code = site['language_code']
   end

   ##
   # create Faraday::Connection instance and set @site
   #
   def create_connection
      @site = Faraday.new :url => @hostname
   end

   ##
   # delete a specific resource
   # resources are "site", "page", "user", "file", "map", "tag", "page_tag"
   # identifier is id, pagename, slug, etc.
  def delete(resource,identifier)
    case resource
    when resource == "site"
      @hostname = identifier
      create_connection
    when resouce == "user"
      @hostname = list(identifier)   
    end  

    http_delete()
  end

  def http_delete()
    response = @site.delete
    puts response.to_s
  end

这是我正在尝试运行的rspec测试:

$LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
require 'localwiki_client'

describe '<siteinfo>.amazonaws.com/bears' do

  subject { Localwiki::Client.new '<siteinfo>.compute-1.amazonaws.com/bears', '<username>', '[myApiKey]' }

  context '#fetch' do
    subject.delete('page', 'bears')
  end

end

1 个答案:

答案 0 :(得分:4)

您无法在上下文块中访问该主题。您需要将它放在前一块或实际的测试块中(它/指定):

describe '<siteinfo>.amazonaws.com/bears' do

  subject { Localwiki::Client.new '<siteinfo>.compute-1.amazonaws.com/bears', '<username>', '[myApiKey]' }

  context '#fetch' do
    it "deletes the bears page" do
      subject.delete('page', 'bears')
    end
  end

end