除了黄瓜情景之外,我还决定写一些请求规范。但是我的第一个例子失败了:
所以在我的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'的行。
答案 0 :(得分:0)
如果我理解这是如何正常工作的,RSpec使用来自Rails的Test :: Unit助手。如果从您描述的内容中读取控制器名称,那么您需要describe AchievementsController
,而不仅仅是一些字符串。您没有访问页面然后发送put
,您只需描述控制器并发送put
。
也就是说,当您使用capybara集成测试助手时,put
和get
等单元测试助手可能无法执行您想要的操作,因为它们将在上下文之外执行浏览器驱动程序。您应该指示Capybara单击所需的链接或按钮(或执行用户执行的任何操作)。