2

感谢您的回复。我在应用程序Git 应用程序
中遇到错误并出现错误

Failures:

  1) Page pages page creation with invalid information should not create a page
     Failure/Error: before(:each) { visit new_admin_page_path }
     NoMethodError:
       undefined method `visit' for #<Page:0x00000005094bb0>
     # ./spec/requests/page_request_spec.rb:13:in `block (3 levels) in <top (required)>'

  2) Page pages page creation with invalid information error messages 
     Failure/Error: before(:each) { visit new_admin_page_path }
     NoMethodError:
       undefined method `visit' for #<Page:0x000000051671f0>
     # ./spec/requests/page_request_spec.rb:13:in `block (3 levels) in <top (required)>'

Finished in 1.21 seconds
14 examples, 2 failures

我错过了什么?

4

3 回答 3

10

我克隆了您的存储库并运行了规范。问题是您使用该术语page来表示两种不同的事物,Capybara 页面 ( subject { page }) 和带有名称的模型Page(您也命名为page)。这两个名称冲突,这就是为什么 rspec 抱怨没有方法visit用于#<Page:0x00000005094bb0>.

要解决这个问题,只需重命名您在初始创建的页面let

let(:mypage) { Factory.create(:page) }

这将通过命名您的页面模型mypage而不是page.

然而还有其他问题。您的用户工厂不使用序列来分配电子邮件,因此您会收到验证错误,因为它表示电子邮件已被占用。

我将您的用户工厂更改为:

sequence(:email) { |n| "abc#{n}@example.com"}
factory :user do
  email
  password "foobar"
  password_confirmation "foobar"
  ...

这修复了验证错误,但您现在得到另一个错误。在您的第一个规范中,您应该检查classcount上的变化,而不是记录(或)。 Page pagemypage

所以将其更改为:

expect { click_button "Create Page" }.not_to change(Page, :count)

仍然会给您留下错误,因为您也没有create对您的PagesController. 从您写的内容来看,该信息似乎无效,因此它甚至不应该执行此操作。我不知道你到底想在这里做什么,所以剩下的留给你自己弄清楚。

于 2012-09-19T12:17:22.613 回答
6

如果您最近升级到 Capybara 2.0 并且您的集成测试正在使用以前版本的 Capybara,您可以尝试将 requests 目录重命名为 features。检查http://www.codelearn.org/blog/how-to-make-old-integration-tests-work-with-capybara-2-0

于 2012-12-20T16:29:03.550 回答
3

Add the following to your spec/spec_helper.rb (in your Spork.prefork block):

require 'capybara/rspec'
require 'capybara/rails'
于 2012-09-19T06:31:58.050 回答