新手问题 Rspec 中有没有 post delete 等方法?

vincent178 · 2013年02月21日 · 最后由 nightire 回复于 2013年02月21日 · 2639 次阅读

在用 Rspec 和 Capybara 做测试的时候,我用到了这样一段代码 spec/features/authentication_page_spec.rb

describe "submitting to the create action" do
  before { post micropost_index_path }
  specify { response.should redirect_to(signin_path) }
end

得到了这样的错误信息

Failure/Error: before { post micropost_index_path }
NoMethodError:
  undefined method `post' for #<RSpec::Core::ExampleGroup::Nested_3::Nested_2::Nested_1::Nested_1::Nested_1:0x007febde8995c8>

求助,谢谢呀~

你这里是 Feature Test,不应该使用 HTTP Methods,而应该使用 Capybara 去模拟用户在页面上的操作。要么就用 FactoryGirl 去生成 Fixtures。

# Capybara way
before do
  visit micropost_index_path
  click_on "New Button" // or anything else indicate to perform a post action
end

# or FatoryGirl way

before { FactoryGirl.create :micropost }

# also this way is recommended

let(:micropost) { FactoryGirl.create :micropost }

测试里直接使用 HTTP Methods 的情况应该出现在 Unit Test 里,比如 ControllerTest 里。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号