gpt4 book ai didi

ruby-on-rails - Rails 中工厂女孩的单表继承

转载 作者:行者123 更新时间:2023-12-04 21:16:02 25 4
gpt4 key购买 nike

我正在制作 Rails 4.0.1应用程序使用 CapybaraFactoryGirl但我无法让我的测试正常工作。

我正在使用单表继承来制作 Collection < ActiveRecord::Base和一个 VideoCollection < Collection模型。在我的测试中使用 Factory Girl 时,模型似乎没有像它们应该的那样被实例化。

细节:

  • 当我在我正在测试的浏览器中目视检查 View 时,它会正确显示集合。
  • 当我跑 print page.html在同一 View 的测试中,该集合没有出现在页面代码中。
  • 如果我使用 rails c test 进入测试控制台并执行 FactoryGirl.create(:video_collection) ,然后视频集被插入到数据库中没问题。

  • 编码:

    我的模特:
    # ------in app/models/collection.rb------
    class Collection < ActiveRecord::Base
    end

    # ------in app/models/video_collection.rb------
    class VideoCollection < Collection
    end

    # ------in db/schema.rb------
    create_table "collections", force: true do |t|
    t.string "type"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string "name"
    t.string "tile_image_link"
    end

    我的工厂:
    FactoryGirl.define do
    ...
    factory :collection do |collection|

    factory :video_collection, class: VideoCollection, parent: :collection do |u|
    u.sequence(:name) { |n| "Video Collection #{n}" }
    tile_image_link "some-link.png"
    type "VideoCollection"
    end
    end
    ...
    end

    我的测试:
    # -----in spec/requests/video_collections_spec.rb-----
    require 'spec_helper'
    describe "VideoCollections" do

    let(:video_collection) do
    FactoryGirl.create(:video_collection)
    end

    ...

    ### This test fails ###
    expect(page).to have_link(video_collection.name,
    href: "video/#{video_collection.id}")

    测试输出:
    Failure/Error: expect(page).to have_link(video_collection.name,
    expected #has_link?("Video Collection 1", {:href=>"video/181"}) to return true, got false

    我不明白为什么在测试运行时没有正确插入工厂的 video_collection 记录。更令我困惑的是,我可以使用相同的命令从控制台插入它们而没有问题。我的工厂代码中是否有错误?

    谢谢您的帮助!

    最佳答案

    改变:

    let(:video_collection) do 
    FactoryGirl.create(:video_collection)
    end
    到:
    let!(:video_collection) do 
    FactoryGirl.create(:video_collection)
    end
    两者的区别在于 ! (感叹号)在 let 之后

    关于ruby-on-rails - Rails 中工厂女孩的单表继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23470209/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com