gpt4 book ai didi

ruby-on-rails - Controller 规范的未定义方法 "contain"

转载 作者:行者123 更新时间:2023-12-05 01:05:48 27 4
gpt4 key购买 nike

最好把规范分开,这样你就有了与 MVC 架构的每个方面有关的规范,但我认为 Controller 规范和 View 规范有轻微的交叉。

对于 View 规范,您应该只关心 View ,但是对于 Controller 规范,我仍然认为测试是否呈现正确 View 是一个好主意,甚至可能测试 View 的内容,尽管更深入内容的测试应该在 View 规范中进行。

尽管这篇文章很清楚,https://www.relishapp.com/rspec/rspec-rails/v/2-1/docs/controller-specs/render-views ,描述如何做到这一点,我只是无法整合我的 View 和 Controller 规范。

我不断收到错误未定义的方法“包含”!

这是我的 spec_helper:

# This file is copied to spec/ when you run 'rails generate rspec:install'
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'


require 'capybara/rspec'
require 'capybara/rails'

require 'factory_girl_rails'
require 'ap'

def set(factory)
@user = FactoryGirl.create(factory)
end

def sign_up(first_name, last_name, profile_name, email, password)
visit "/"
click_link "Register"
fill_in('First name', with: first_name)
fill_in('Last name', with: last_name)
fill_in('Profile name', with: profile_name)
fill_in('Email', with: email)
fill_in('Password', with: password)
fill_in('Password confirmation', with: password)
click_button 'Sign up'
end

def sign_in(email, password)
visit "/"
click_link "Sign In"
fill_in('Email', with: email)
fill_in('Password', with: password)
click_button 'Sign in'
end

def sign_out
visit "/"
click_link "Sign Out"
end



#Webrat.configure do |config|
# config.mode = :rails
#end

#webrat

require 'capybara/poltergeist'
# Capybara.javascript_driver = :poltergeist


Capybara.javascript_driver = :selenium


Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }

# Checks for pending migrations before tests are run.
# If you are not using ActiveRecord, you can remove this line.
ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration)


RSpec.configure do |config|
# true means 'yes, filter these specs'
config.filter_run_excluding stress: true
# config.current_driver = :webkit
# config.use_transactional_fixtures = false

# config.include Capybara::DSL


DatabaseCleaner.strategy = :truncation


config.after(:suite) do
DatabaseCleaner.clean_with(:truncation)
end

# config.before(:suite) do
# DatabaseCleaner.strategy = :transaction
# DatabaseCleaner.clean_with(:truncation)
# DatabaseCleaner.start
# end

# config.after(:each) do
# DatabaseCleaner.clean
# end

#config.after(:suite) do
# DatabaseCleaner.strategy = :transaction
# DatabaseCleaner.clean_with(:truncation)
# DatabaseCleaner.clean
# end


# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
# config.fixture_path = "#{::Rails.root}/spec/fixtures"

# config.include RSpec::Rails::RequestExampleGroup, type: :feature

# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false
# instead of true.
config.use_transactional_fixtures = true



I18n.enforce_available_locales = true

# If true, the base class of anonymous controllers will be inferred
# automatically. This will be the default behavior in future versions of
# rspec-rails.
config.infer_base_class_for_anonymous_controllers = false

# Run specs in random order to surface order dependencies. If you find an
# order dependency and want to debug it, you can fix the order by providing
# the seed, which is printed after each run.
# --seed 1234
config.order = "random"
end

这是我的 Controller 规范:
require "spec_helper"

describe UserFriendshipsController, type: :controller do
render_views
let (:user_1) { FactoryGirl.create(:user_1)}

before {
sign_in user_1
get :index
}

it "renders the :index view" do
response.should render_template(:index)
end

it "view contains expected html" do
# a sanity test more than anything
response.should contain("Welcome to the home page")
end
end

运行此规范后,我得到以下信息:
.F

Failures:

1) UserFriendshipsController view contains expected html
Failure/Error: response.should contain("Listing widgets")
NoMethodError:
undefined method `contain' for #<RSpec::Core::ExampleGroup::Nested_1:0x00000008632268>
# ./spec/controllers/user_friendships_spec.rb:18:in `block (2 levels) in <top (required)>'

Finished in 0.1835 seconds
2 examples, 1 failure

为什么会这样?我怎样才能让它发挥作用?

最佳答案

如果你看 relish documentation for the current 2.14 version of Rspec你会看到他们正在使用 match现在改为:

expect(response.body).to match /Listing widgets/m

使用 should语法,这应该有效:
response.body.should match(/Welcome to the home page/)

关于ruby-on-rails - Controller 规范的未定义方法 "contain",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20956825/

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