- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在关注这个 post关于在我的 Rails 4 应用程序的路由中设置身份验证。
这是我的 routes.rb 文件:
Rails.application.routes.draw do
devise_for :employees, :controllers => { registrations: 'employees/registrations' }
devise_for :clients
authenticate :employee do
resources :quotation_requests, only: [:show, :edit,:index, :update, :destroy]
end
resources :quotation_requests, only: [:new, :create]
get '/dashboard' => 'dashboard#show', as: 'show_dashboard'
root to: 'home#index'
end
require 'rails_helper'
RSpec.describe QuotationRequestsController, type: :controller do
describe "GET index" do
it "renders :index template" do
get :index
expect(response).to render_template(:index)
end
it "assigns quotation requests to template" do
quotation_requests = FactoryGirl.create_list(:quotation_request, 3)
get :index
expect(assigns(:quotation_requests)).to match_array(quotation_requests)
end
end
describe "GET edit" do
let(:quotation_request) { FactoryGirl.create(:quotation_request)}
it "renders :edit template" do
get :edit, id: quotation_request
expect(response).to render_template(:edit)
end
it "assigns the requested quotation request to template" do
get :edit, id: quotation_request
expect(assigns(:quotation_request)).to eq(quotation_request)
end
end
describe "PUT update" do
let(:quotation_request) { FactoryGirl.create(:quotation_request)}
context "valid data" do
new_text = Faker::Lorem.sentence(word_count=500)
let(:valid_data) { FactoryGirl.attributes_for(:quotation_request, sample_text: new_text)}
it "redirects to quotation_request#showtemplate" do
put :update, id: quotation_request, quotation_request: valid_data
expect(response).to redirect_to(quotation_request)
end
it "updates quotation request in the database" do
put :update, id: quotation_request, quotation_request: valid_data
quotation_request.reload #need to reload the object because we have just updated it in the database so need to get the new values
expect(quotation_request.sample_text).to eq(new_text)
end
end
context "invalid data" do
let(:invalid_data) { FactoryGirl.attributes_for(:quotation_request, sample_text: "", number_of_words: 400)}
it "renders the :edit template" do
put :update, id: quotation_request, quotation_request: invalid_data
expect(response).to render_template(:edit)
end
it "does not update the quotation_request in the database" do
put :update, id: quotation_request, quotation_request: invalid_data
quotation_request.reload
expect(quotation_request.number_of_words).not_to eq(400)
end
end
end
describe "GET new", new: true do
it "renders :new template" do
get :new
expect(response).to render_template(:new)
end
it "assigns new QuotationRequest to @quotation_request" do
get :new
expect(assigns(:quotation_request)).to be_a_new(QuotationRequest)
end
end
describe "GET show" do
#this test requires that there be a quotation request in the database
let(:quotation_request) { FactoryGirl.create(:quotation_request) }
context 'invalid request' do
it "does not render :show template if an employee or client is not signed in" do
#setup
quotation_request = create(:quotation_request)
#exercise
get :show, id: quotation_request
#verification
expect(response).to_not render_template(:show)
end
end
context 'valid request' do
sign_in_proofreader
it "renders :show template if an employee or client is signed in" do
#setup
quotation_request = create(:quotation_request)
#exercise
get :show, id: quotation_request
#verification
expect(response).to render_template(:show)
end
it "assigns requested quotation_request to @quotation_request" do
get :show, id: quotation_request
expect(assigns(:quotation_request)).to eq(quotation_request)
end
end
end
describe "POST create", post: true do
context "valid data" do
let(:valid_data) {FactoryGirl.nested_attributes_for(:quotation_request)}
it "redirects to quotation_requests#show" do
post :create, quotation_request: valid_data
expect(response).to redirect_to(quotation_request_path(assigns[:quotation_request]))
end
it "creates new quotation_request in database" do
expect {
post :create, quotation_request: valid_data
}.to change(QuotationRequest, :count).by(1)
end
end
context "invalid data" do
let(:invalid_data) {FactoryGirl.nested_attributes_for(:quotation_request).merge(sample_text: 'not enough sample text')}
it "renders :new template" do
post :create, quotation_request: invalid_data
expect(response).to render_template(:new)
end
it "doesn't creates new quotation_request in database" do
expect {
post :create, quotation_request: invalid_data
}.not_to change(QuotationRequest, :count)
end
end
end
describe "DELETE destroy" do
let(:quotation_request) { FactoryGirl.create(:quotation_request) }
it "redirects to the quotation request#index" do
delete :destroy, id: quotation_request
expect(response).to redirect_to(quotation_requests_path)
end
it "delets the quotation request from the database" do
delete :destroy, id: quotation_request
expect(QuotationRequest.exists?(quotation_request.id)).to be_falsy
end
end
end
class QuotationRequestsController < ApplicationController
# before_action :authenticate_employee!, :only => [:show]
def index
@quotation_requests = QuotationRequest.all
end
def new
@quotation_request = QuotationRequest.new
@quotation_request.build_client
end
def edit
@quotation_request = QuotationRequest.find(params[:id])
end
def create
client = Client.find_or_create(quotation_request_params[:client_attributes])
@quotation_request = QuotationRequest.new(quotation_request_params.except(:client_attributes).merge(client: client))
if @quotation_request.save
ClientMailer.quotation_request_created(client.email, @quotation_request.id).deliver_now
redirect_to @quotation_request, notice: 'Thank you.'
else
render :new
end
end
def show
@quotation_request = QuotationRequest.find(params[:id])
end
def update
@quotation_request = QuotationRequest.find(params[:id])
if @quotation_request.update(quotation_request_params)
redirect_to @quotation_request
else
render :edit
end
end
def destroy
QuotationRequest.destroy(params[:id])
redirect_to quotation_requests_path
end
private
def quotation_request_params
params.require(:quotation_request).permit(:number_of_words, :return_date, :sample_text, :client_attributes => [:first_name, :last_name, :email])
end
end
before_action :authenticate_employee!, :only => [:show]
QuotationRequestsController
GET index
valid request
renders :index template for signed in employee
assigns quotation requests to template
invalid request
does not render :index template without a signed in employee (FAILED - 1)
GET edit
valid request
renders :edit template with a signed in employee
assigns the requested quotation request to template
invalid request
does not render the :edit template without a signed in employee (FAILED - 2)
PUT update
valid request
valid data
redirects to quotation_request#showtemplate
updates quotation request in the database
invalid data
renders the :edit template
does not update the quotation_request in the database
invalid request
redirects user to the sign in page (FAILED - 3)
GET new
renders :new template
assigns new QuotationRequest to @quotation_request
GET show
invalid request
does not render :show template if an employee or client is not signed in (FAILED - 4)
valid request
renders :show template if an employee or client is signed in
assigns requested quotation_request to @quotation_request
POST create
valid data
redirects to quotation_requests#show
creates new quotation_request in database
invalid data
renders :new template
doesn't creates new quotation_request in database
DELETE destroy
valid request
redirects to the quotation request#index
delets the quotation request from the database
invalid request
does not delete the quotation request without a signed in employee (FAILED - 5)
Failures:
1) QuotationRequestsController GET index invalid request does not render :index template without a signed in employee
Failure/Error: expect(response).to_not render_template(:index)
Didn't expect to render index
# ./spec/controllers/quotation_requests_controller_spec.rb:43:in `block (4 levels) in <top (required)>'
# -e:1:in `<main>'
2) QuotationRequestsController GET edit invalid request does not render the :edit template without a signed in employee
Failure/Error: expect(response).to_not render_template(:edit)
Didn't expect to render edit
# ./spec/controllers/quotation_requests_controller_spec.rb:92:in `block (4 levels) in <top (required)>'
# -e:1:in `<main>'
3) QuotationRequestsController PUT update invalid request redirects user to the sign in page
Failure/Error: expect(response).to_not redirect_to(quotation_request)
Didn't expect to redirect to #<QuotationRequest:0x007fe7eb69c8c0>
# ./spec/controllers/quotation_requests_controller_spec.rb:182:in `block (4 levels) in <top (required)>'
# -e:1:in `<main>'
4) QuotationRequestsController GET show invalid request does not render :show template if an employee or client is not signed in
Failure/Error: expect(response).to_not render_template(:show)
Didn't expect to render show
# ./spec/controllers/quotation_requests_controller_spec.rb:217:in `block (4 levels) in <top (required)>'
# -e:1:in `<main>'
5) QuotationRequestsController DELETE destroy invalid request does not delete the quotation request without a signed in employee
Failure/Error: expect(QuotationRequest.exists?(quotation_request.id)).to be_truthy
expected: truthy value
got: false
# ./spec/controllers/quotation_requests_controller_spec.rb:361:in `block (4 levels) in <top (required)>'
# -e:1:in `<main>'
Finished in 2.11 seconds (files took 1.75 seconds to load)
23 examples, 5 failures
Failed examples:
rspec ./spec/controllers/quotation_requests_controller_spec.rb:37 # QuotationRequestsController GET index invalid request does not render :index template without a signed in employee
rspec ./spec/controllers/quotation_requests_controller_spec.rb:83 # QuotationRequestsController GET edit invalid request does not render the :edit template without a signed in employee
rspec ./spec/controllers/quotation_requests_controller_spec.rb:171 # QuotationRequestsController PUT update invalid request redirects user to the sign in page
rspec ./spec/controllers/quotation_requests_controller_spec.rb:208 # QuotationRequestsController GET show invalid request does not render :show template if an employee or client is not signed in
rspec ./spec/cont
最佳答案
我认为您正在使用 rspec-rails在您的 Rails 应用中。
rspec-rails 为你设置了很多方便的方法,但同时也引入了一些黑魔法,可能会导致一些意想不到的结果——就像这样。
As you can see here它在 Controller 规范的注释中进行了解释:
# Supports a simple DSL for specifying behavior of ApplicationController.
# Creates an anonymous subclass of ApplicationController and evals the
# `body` in that context. Also sets up implicit routes for this
# controller, that are separate from those defined in "config/routes.rb".
spec/requests, spec/api, and spec/integration
或者通过显式声明它们的类型
RSpec.describe "Something", type: :request do
spec/features
或将类型声明为
RSpec.describe "Something", type: :feature do
关于ruby-on-rails-4 - 经过身份验证的路由不适用于 Rspec 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39343795/
在 JSF2 应用程序中遇到验证属性的问题时,有两种主要方法。 使用 Annotation 在 ManagedBean 上定义验证 @ManagedBean public class MyBean {
我想实现一个不常见的功能,我认为 jquery 验证插件将是最好的方法(如果您在没有插件的情况下建议和回答,我们也会欢迎)。我想在用户在输入字段中输入正确的单词后立即隐藏表单。我试过这个: $("
我有几个下拉菜单(类名为month_dropdown),并且下拉菜单的数量不是恒定的。我怎样才能为它们实现 NotEqual 验证。我正在使用 jQuery 验证插件。 这就是我写的 - jQuery
我设法制作了这个网址验证代码并且它起作用了。但我面临着一个问题。我认为 stackoverflow 是获得解决方案的最佳场所。 function url_followers(){ var url=do
我目前正在使用后端服务,该服务允许用户在客户端应用程序上使用 Google Games 库登录。 用户可以通过他们的 gplay ID 向我们发送信息,以便登录或恢复旧帐户。用户向我们发送以下内容,包
我正在尝试验证输入以查看它是否是有效的 IP 地址(可能是部分地址)。 可接受的输入:172、172.112、172.112.113、172.112.113.114 Not Acceptable 输入
我从 Mongoose 验证中得到这条消息: 'Validator failed for path phone with value ``' 这不应该发生,因为不需要电话。 这是我的模型架构: var
我一直在尝试使用Python-LDAP (版本 2.4.19)在 MacOS X 10.9.5 和 Python 2.7.9 下 我想在调用 .start_tls_s() 后验证与给定 LDAP 服务
我正在处理一个仅与 IE6 兼容的旧 javascript 项目(抱歉...),我想仅在 VS 2017 中禁用此项目的 ESLint/CSLint/Javascript 验证/CSS 验证。 我知道
我正在寻找一种方法来验证 Spring 命令 bean 中的 java.lang.Double 字段的最大值和最小值(一个值必须位于给定的值范围之间),例如, public final class W
我正在尝试在 springfuse(JavaEE 6 + Spring Framework (针对 Jetty、Tomcat、JBoss 等)) 和 maven 的帮助下构建我的 webapps 工作
我试图在我们的项目中使用 scalaz 验证,但遇到了以下情况: def rate(username: String, params: Map[String, String]): Validation
我有一个像这样的 Yaml 文件 name: hhh_aaa_bbb arguments: - !argument name: inputsss des
我有一个表单,人们可以单击并向表单添加字段,并且我需要让它在单击时验证这些字段中的值。 假设我单击它两次并获取 2 个独立的字段集,我需要旋转 % 以确保它在保存时等于 100。 我已放入此函数以使其
在我的页面中有一个选项可以创建新的日期字段输入框。用户可以根据需要创建尽可能多的“截止日期”和“起始日期”框。就像, 日期_to1 || date_from1 日期到2 ||日期_from2 date
我有一个像这样的 Yaml 文件 name: hhh_aaa_bbb arguments: - !argument name: inputsss des
有没有办法在动态字段上使用 jquery 验证表单。 我想将其设置为必填字段 我正在使用 Jsp 动态创建表单字段。 喜欢 等等...... 我想使用必需的表单字段验证此表单字段。 最佳答
嗨,任何人都可以通过提供 JavaScript 代码来帮助我验证用户名文本框不应包含数字,它只能包含一个字符。 最佳答案 使用正则表达式: (\d)+ 如果找到匹配项,则字符串中就有一个数字。 关于J
我有两个输入字段holidayDate和Description(id=tags) $(document).ready(function() {
我遇到了这个问题,这些验证从电子邮件验证部分开始就停止工作。 我只是不明白为什么即使经过几天的观察,只是想知道是否有人可以在这里指出我的错误? Javascript部分: function valid
我是一名优秀的程序员,十分优秀!