1

我正在使用 rspec,并且正在尝试为用户的汽车测试 DELETE 方法:

 describe "DELETE " do
    it "should delete a car" do
        #@car = Factory.create :car
        expect { click_link "Delete" }.to change{Car.count}.by(-1)
    end
end

当我运行它时,我得到了这个错误:

CarsController DELETE  should delete a car
 Failure/Error: expect { click_link "Delete" }.to change{Car.count}.by(-1)
 Capybara::ElementNotFound:
   no link with title, id or text 'Delete' found
 # (eval):2:in `click_link'
 # ./spec/controllers/car_controller_spec.rb:30:in `block (4 levels) in <top (required)>'
 # ./spec/controllers/car_controller_spec.rb:30:in `block (3 levels) in <top (required)>'

我不知道为什么,因为我的 index.html.erb 上有这个链接:

<td><%= link_to 'Delete', user_car_path(@user, car), :confirm => 'Are you sure?', :method => :delete %></td>

但在我的应用程序中它有效

4

1 回答 1

2

rails 中的删除请求被转换为表单,这就是找不到元素的原因。您还需要触发确认。

点击删除:

find('a', :text => 'Delete').click

接受确认:

page.driver.browser.switch_to.alert.accept

如果您希望能够使用 Railscast,可以在没有 JavaScript 的情况下实现 destroy 方法click_link

http://railscasts.com/episodes/77-destroy-without-javascript/

于 2012-08-02T20:33:54.843 回答