我尝试在Rails中编写Rspec测试,使用Desive助手方法进行登录和注销。“登录”方法不起作用。然而,在对应用程序进行大量更改之前,它就已经开始工作了。
我尝试过的事情:
到目前为止,没有骰子。使用已登录用户测试控制器时,需要做哪些不同的操作?
错误消息:
OrderItemsController GET #index renders the :index view
Failure/Error: sign_in :admin
NoMethodError:
undefined method `sign_in' for # <RSpec::ExampleGroups::OrderItemsController_2::GETIndex:0x00000102c002d0>
# ./spec/controllers/order_items_controller_spec.rb:6:in `block (2 levels) in <top (required)>'
控制器规格
require 'spec_helper'
describe OrderItemsController do
before (:each) do
admin = create(:admin)
sign_in :admin
end
describe "GET #index" do
it "renders the :index view" do
get :index
expect( response ).to render_template :index
end
end
end
说明助手。铷
require 'rspec/rails'
require 'capybara/rspec'
RSpec.configure do |config|
config.include ApplicationHelper
config.include ControllersHelper
config.include UsersHelper
config.include Devise::TestHelpers, type: :controller
config.include FactoryGirl::Syntax::Methods
end
Gemfile
group :development, :test do
gem 'rspec-rails', '~> 3.0.0.beta'
gem 'capybara'
gem 'factory_girl_rails'
gem 'faker'
gem 'dotenv-rails'
gem 'guard'
gem 'guard-annotate'
gem 'guard-rspec', require: false
gem 'guard-livereload', require: false
gem 'foreman'
end
工厂/用户。铷
FactoryGirl.define do
factory :user do
first { Faker::Name.first_name }
last { Faker::Name.last_name }
email { Faker::Internet.email }
admin false
password "secrets1"
password_confirmation "secrets1"
confirmed_at Date.today
factory :admin do
admin true
end
end
end
提前感谢。
我可以为您提供一个示例(适用于我-rspec/capybara/simplecov等)
等级库/等级库辅助对象。铷
require 'capybara/rspec'
require 'capybara/rails'
RSpec.configure do |config|
config.use_transactional_fixtures = true
config.infer_base_class_for_anonymous_controllers = false
config.include FactoryGirl::Syntax::Methods
config.include Devise::TestHelpers, type: :controller
config.include Capybara::DSL
config.include Warden::Test::Helpers
config.include Rails.application.routes.url_helpers
end
规范/集成/用户\流程\规范rb
require 'spec_helper'
feature 'Verify contract' do
# Create employee
let(:employee) { create(:employee) }
let (:book) { create(:book) }
# Sign in employee before each test!
before :each do
login_as employee, scope: :user
end
scenario 'create book' do
# Visit Index and click to create
visit employee_books_path
click_link 'Create'
expect(current_path).to eq(employee_books_path)
end
end
我希望一切都会好起来:)我想你的问题是找不到监狱长考试助手。。。
我想出了一个解决办法。我将控制器的descripe块显式定义为控制器类型。
describe OrderItemsController, :type => :controller do
我仍然不明白为什么这段代码以前可以工作,但现在需要这个(看似多余的)显式声明。不管怎样,我很想知道这里发生了什么。谢谢
你最近有没有像我一样升级到RSpec 3?这来自RSpec 3文档:
自动添加元数据RSpec 3.0.0之前的版本根据元数据在文件系统中的位置自动将其添加到规格中。这对新用户来说是混乱的,对一些老用户来说是不可取的。
在RSpec 3中,必须显式启用此行为:
# spec/rails_helper.rb
RSpec.configure do |config|
config.infer_spec_type_from_file_location!
end
由于这种假定行为在教程中非常普遍,rails generate rspec:install生成的默认配置启用了这一功能。
如果遵循上面列出的规范目录结构,并配置了“从文件位置推断规范类型”!,RSpec将自动为每种类型提供正确的支持功能。
添加该配置片段后,我不再需要指定规范类型(例如,type::controller
)。
Rails关联的基本问题如下表: 商店:名称,网络 产品:标题、价格、店铺id 关系定义为has_many并属于: 型号: shop.rb 产品rb型 控制器: shops\u控制器。rb型 products_controller.rb 在商店视图中,我设法参考并显示每个商店的所有产品,没有问题: 但另一方面,在产品视图中,我无法从Shop表中显示网络信息: 这将返回以下错误:
我环顾了一下四周,但也许我找的地方不对。我试图找出如何测试用户无法访问其控制器具有以下功能的页面: 理想情况下,我希望同时捕获Desive信息: 到目前为止,我有这个 终止 目前我得到了错误 活动控制器 在我的规范助手中,我调用以下内容 控制器\u宏。铷 在这个阶段,我不称之为login_user方法,那么spec_helper会称之为这个吗? 我如何正确处理这个问题?
我试过在本地迁移,然后推到heroku它没有工作。我尝试过heroku run rake DB:Migrate,然后重新启动它不起作用。 我试着重新启动dyno,它也没有工作。 有什么我可以查一下的可以提供更多的细节吗?我正在查看heroku run rake db:migrate:status,但它只显示了一般的迁移创建书籍。 Controllers/Books_Controller.rb
我正在开发一个Rails应用程序,它有两个名称空间,分别是用于管理员的admin和用于移动设备的api 昨天发生了一件奇怪的事。我在我的PostgreSQL数据库中创建了一个新表,由id、name、created\u at、Update\u at组成。 我试图使用名称空间获取所有设施http://localhost:3000/admin/facilities它运行良好(返回HTML和工具列表)。
我将Rails版本从3.2升级到4.2.6,并设计了从1.4.9到4.2.0的版本。当我使用创建更新密码运行我的应用程序时,一切都很好。但是当我将旧的生产数据库转储上传到新数据库并尝试重置密码时,我面临以下错误: 无方法错误(未定义的方法“reset_password_sent_at=” db/migrate/xxxxxxxx _ device _ create _ users . Rb: 旧迁移
Good day我不确定发生了什么我怀疑eclipse,但在UserDetailsServiceImpl中它是定义的,因为我实现了spring的UserDetails服务,下面是我的代码 这是让人头痛的一行“UserDetails UserDetails=userDetailsService.loadUserByUsername(username)”提前感谢您