Rails请求规范没有发出put请求

时间:2012-01-19 21:00:36

标签: ruby-on-rails ruby rspec

除了黄瓜情景之外,我还决定写一些请求规范。但是我的第一个例子失败了:

所以在我的goalController中有这个put方法:

   def achieve
        @goal.update_attribute(:achieved, true)
        redirect_to :back
   end

这是一个例子:

# -*- coding: utf-8 -*-
require 'spec_helper'

describe "Achievements" do
  before(:all) do
    @bob = Factory(:user, :email => "bob@mail.com", :password => "qweqwe", :password_confirmation => "qweqwe", :money => 500)
    @achieve = Factory(:goal, :user => @bob, :title => "Notebook", :price => 100, :achieved => false)
    login_user('bob@mail.com', 'qweqwe')
  end
    it 'can not be achieved twice' do
      visit dashboard_path
      put achieve_user_goal_path(@bob, @achieve) #Passes it well
      @achieve.reload #same with or without this line
      @achieve.achieved.should equal true #Fails
    end
end

因此,在放置请求'实现'字段后变为真。它在我的应用程序和黄瓜步骤中完美运行,但不在此rspec示例中。这就像rspec只是忽略'put'的行。

1 个答案:

答案 0 :(得分:0)

如果我理解这是如何正常工作的,RSpec使用来自Rails的Test :: Unit助手。如果从您描述的内容中读取控制器名称,那么您需要describe AchievementsController,而不仅仅是一些字符串。您没有访问页面然后发送put,您只需描述控制器并发送put

也就是说,当您使用capybara集成测试助手时,putget等单元测试助手可能无法执行您想要的操作,因为它们将在上下文之外执行浏览器驱动程序。您应该指示Capybara单击所需的链接或按钮(或执行用户执行的任何操作)。