0

DataMapper を使用している Sinatra アプリケーションを RSpec でテストしています。

次のコード:

it "should update the item's title" do
  lambda do
    post "/hello/edit", :params => {
      :title => 'goodbye',
      :body  => 'goodbye world'
    }
  end.should change(Snippet, :title).from('hello').to('goodbye')
end

次のエラーが発生します。

タイトルは最初は「hello」である必要がありましたが、 #<DataMapper::Property::String @model=Snippet @name=:title> でした

もちろん、ラムダを削除して次のことのみを確認することで、これをハックできます。

Snippet.first.title.should == 'goodbye' 

しかし、 .firstスニペットは将来同じではない可能性があるため、それは長期的な解決策にはなりません。

誰かが正しい構文を教えてくれますか?

ありがとう。

4

2 に答える 2

2

書かれている仕様は、ラムダが実際にclass属性の値を変更する必要があることを意味しますSnippet.title。あなたが望むのは次のようなものだと思います:

it "should update the item's title" do
  snippet = Snippet.first(:title => "hello")
  lambda do
    post "/#{snippet.title}/edit", :params => {
      :title => 'goodbye',
      :body  => 'goodbye world'
    }
  end.should change(snippet, :title).from('hello').to('goodbye')
end

右?

于 2012-05-08T19:01:44.830 に答える
1

私は最終的にそれを使用して修正しました:

it "should update the item's title" do
  snippet = Snippet.first(:title => "hello")
  post "/hello/edit", :params => {
    :title => 'goodbye',
    :body  => 'goodbye world'
  }
  snippet.reload.title.should == 'goodbye'
end

答えが私を助けてくれた@Dan Taoに感謝します。

于 2012-05-11T19:49:16.223 に答える