【问题标题】:How to test Rails belongs_to relationship using rspec integration test and factory girl如何使用 rspec 集成测试和工厂女孩测试 Rails 的 belongs_to 关系
【发布时间】:2012-07-16 06:28:30
【问题描述】:

仍在尝试了解关系并在 rails/rspec 中进行测试。

我有一个应用程序,它有一个模型测验,它属于一个图标模型,并且有_许多测验。

我正在尝试使用 rspec/capybara 和工厂女孩在测试中创建我的数据来测试是否在 quiz/new 页面上创建了一个新测验。

这是我的测试..

 describe "new quiz page" do

    let(:user) { FactoryGirl.create(:user) }
    let(:icon) { FactoryGirl.create(:icon) }

    before do
        sign_in user
        visit new_quiz_path
    end 

    ....

    describe "with valid info" do
      before do
        fill_in "Title",         with: "Example title"
        fill_in "Description",  with: "Example quiz description"
        select icon.title,              from: "quiz_icon_id"
      end

      it "should create new content" do
        expect { click_button submit }.to change(Quiz, :count).by(1)
      end
    end
end

我得到的 rspec 错误是...

     Failure/Error: select icon.title,              from: "quiz_icon_id"
 Capybara::ElementNotFound:
   cannot select option, no option with text 'Icon 1' in select box 'quiz_icon_id'

所以问题显然是没有可供选择的图标。一个肯定是用工厂女孩方法创建的,因为它可以找到标题,但不会在测试表中复制。我不知道如何让它发挥作用。

谁能在这里指点一下?

谢谢,马克。

【问题讨论】:

  • 在您的 it 块中输入 save_and_open_page 以查看正在呈现的页面。
  • “quiz_icon_id”的表单输入是什么样的?通常,您应该使用字段的标签进行选择。例如,如果一个字段被称为category,但在表单上标签被称为User Category,那么您需要使用`from:“用户类别”。

标签: ruby-on-rails ruby-on-rails-3 rspec capybara factory-bot


【解决方案1】:

感谢@Dty 提供 save_and_open_page 提示。这有助于我调试问题。

图标没有被创建,或者至少在页面上运行测试时没有。

为了解决这个问题,我做了这个而不是 let(:icon) 语句。

before(:all) { 1.times {  FactoryGirl.create(:icon) } }
after(:all) { Icon.delete_all }

然后在填写表格的时候我使用了Icon.first.title。

before do
   fill_in "Title",         with: "Example title"
   fill_in "Description",  with: "Example quiz description"
   select Icon.first.title,         from: "quiz_icon_id"
end

我真的不明白为什么我必须使用 before(:all) 语句来创建图标,而不是我之前使用的 'let' 语句。如果有人能提出为什么会这样,将不胜感激。

【讨论】:

  • let 是惰性求值的。当示例到达visit 时,图标需要已经创建——它还没有创建,因为在引用icon 之前不会评估let(在代码块的第二个之前)。您可以通过将其移至更早的 before 块或使用立即评估的 let! 来解决此问题。
  • 很好的解释!非常感谢@zetetic。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多