0

我正在使用 RSpec 测试一个使用 DataMapper 的 Sinatra 应用程序。

以下代码:

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>

我当然可以通过删除lambda并仅检查是否:

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

但这不可能是一个长期的解决方案,因为.first Snippet 在未来可能会不一样。

有人可以告诉我正确的语法吗?

谢谢。

4

2 回答 2

2

您所写的规范暗示 lambda 实际上应该更改属性的值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 回答