gpt4 book ai didi

ruby-on-rails - 使用 Rspec 和 capybara 进行产品模型测试

转载 作者:行者123 更新时间:2023-11-28 21:09:29 26 4
gpt4 key购买 nike

产品.rb

 class Product < ApplicationRecord
validates :name, presence: true, uniqueness: true

end

产品规范.rb

require 'rails_helper'
require 'capybara/rspec'

RSpec.feature "Create Product", :type => :feature do

scenario "User creates a duplicate product" do
visit "/products/new"

fill_in "Name", :with => "My Widget"
click_button "Create"
#expect(page).to have_content("Name has already been taken")
#expect(flash[:notice]).to have_content("Name has already been taken")

expect(flash[:alert]).to match(/Name has already been taken/)
end

scenario "User creates a invalid product" do
visit "/products/new"

fill_in "Name", :with => ""
click_button "Create"

expect(flash[:alert]).to have_text("Name can't be blank.")
end

end

错误显示: Error

如何捕获 Flash 中出现的错误消息?我尝试了 have_content 、 contain 等一切

最佳答案

您无权访问测试中的 flash 对象,您只能访问页面上显示的内容。因此你应该这样做

expect(page).to have_content("Name has already been taken")

或者如果您想检查文本是否出现在页面中的正确位置,并假设它出现在一个 id 为“flash”的元素中,您可以这样做

expect(find('#flash')).to have_content("Name has already been taken")

您实际上并没有在您的测试中显示已创建的另一个产品会与您现在正在创建的产品发生冲突,这可能就是您的测试失败的原因吗?

顺便说一句,假设您使用的 RSpec.feature 别名是由 Capybara 提供的,它在使用时已经设置了 type::feature 元数据,所以您无需也指定它。

关于ruby-on-rails - 使用 Rspec 和 capybara 进行产品模型测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39002941/

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