2011-02-02 6 views
1

私はこのテストをしています。今のrspecがメソッドの引数を間違って返す1 0のために0

モデル

def self.tweet(url) 
    Twitter.configure do |config| 
    config.consumer_key = APP_CONFIG['twitter_consumer_key'] 
    config.consumer_secret = APP_CONFIG['twitter_consumer_secret'] 
    config.oauth_token = APP_CONFIG['twitter_access_token'] 
    config.oauth_token_secret = APP_CONFIG['twitter_secret_token'] 
    end  
    shorted_url = shorten_url(url) 
    Twitter.update("#{title} - #{shorted_url}") 
end 

def self.shorten_url(url) 
    authorize = UrlShortener::Authorize.new APP_CONFIG['bit_ly_id'], APP_CONFIG['bit_ly_api_key'] 
    client = UrlShortener::Client.new authorize 
    shorten_url = client.shorten(url).urls 
end 

def publish(url) 
    update_attributes(:available => true, :locked => false) 
    tweet(url) 
end 

、私は「公開」、最後のメソッドをテストしようとしているが、私は、引数のエラー・メッセージの間違った番号を取得しています。

とテスト側で、私はこれがあります。

describe Job, "publish" do 

    it "should publish a job" do 
    @job = Factory(:job) 
    @job.publish.should change(Job.available).from(false).to(true) 
    end 

end 

とエラーメッセージが表示さ:

1) Job Job publish should publish a job 
    Failure/Error: @job.publish.should change(Job.available).from(false).to(true) 
    wrong number of arguments (0 for 1) 
    # ./app/models/job.rb:60:in `publish' 
    # ./spec/models/job_spec.rb:128:in `block (3 levels) in <top (required)>' 

Finished in 1.12 seconds 
47 examples, 1 failure, 4 pending 

は、任意の助けに感謝!

ありがとうございます!

答えて

3

ラムダでそれを入れてみてください:

lambda { @job.publish }.should change(Job.available).from(false).to(true) 

はまた、私はあなたのモデルのコードのすべてを見ることができないので、わからないんだけど、あなたは@job.availableの代わりJob.availableを使用することを意味しましたか?

編集:私は自己メソッドを使用していなかったので、

lambda { @job.publish }.should change(@job, :available).from(false).to(true) 
+0

はい、@ job.available:あなたはこの形式を使用する必要があるかもしれません。私は正しい?あなたの提案を試してみましょう! –

+0

それは働いた!ありがとう! –