Testing Rails 4测试新手-入门需要帮助(rSpec和Desive)
我对测试比较陌生,对Rails4和rSpec也非常陌生。我试图测试一个使用Desive进行身份验证的控制器,但我被卡住了。我能找到的所有示例都是针对Rails 3的 我使用的是Rails 4.0.3、Desive 3.2.3、rSpec 2.14.1和FactoryGirl 4.4.0Testing Rails 4测试新手-入门需要帮助(rSpec和Desive),testing,ruby-on-rails-4,devise,rspec2,Testing,Ruby On Rails 4,Devise,Rspec2,我对测试比较陌生,对Rails4和rSpec也非常陌生。我试图测试一个使用Desive进行身份验证的控制器,但我被卡住了。我能找到的所有示例都是针对Rails 3的 我使用的是Rails 4.0.3、Desive 3.2.3、rSpec 2.14.1和FactoryGirl 4.4.0 class LessonPlansController < ApplicationController before_action :authenticate_user! # GET /lesso
class LessonPlansController < ApplicationController
before_action :authenticate_user!
# GET /lesson_plans
def index
@lesson_plans = current_user.lesson_plans.to_a
end
.
.
.
private
# Use callbacks to share common setup or constraints between actions.
def set_lesson_plan
@lesson_plan = LessonPlan.find(params[:id])
end
# Only allow a trusted parameter "white list" through.
def lesson_plan_params
params[:lesson_plan]
end
def lesson_plan_params
params.require(:lesson_plan).permit(:title, :synopsis)
end
end
测试部分就是我被卡住的地方
describe LessonPlansController do
let(:valid_attributes) { { } }
let(:valid_session) { {} }
# describe "GET index" do
it "assigns all lesson_plans as @lesson_plans" do
user=FactoryGirl.create(:user)
sign_in user
lesson_plan = LessonPlan.create! valid_attributes
get :index, {}, valid_session
assigns(:lesson_plans).should eq([lesson_plan])
end
end
我不确定要在有效的\u属性和有效的\u会话中放置什么(或者我是否需要它们)。测试将在用户登录时进行,但在创建课程计划时将失败。诚然,这是rSpec的默认/生成测试,但我不确定如何继续
我看到的示例使用before块来设置用户。我在Desive wiki页面上找不到任何关于如何为需要用户登录的控制器编写基本rSpec测试的内容。任何指点都将不胜感激 “我不确定在有效的\u属性和有效的\u会话中放置什么(或者我是否需要它们)。”
那要看你在测试什么。。假设您正在测试验证&希望确保在x列设置为null时不会创建记录。。。然后,您可以尝试专门创建一个具有无效属性的记录(例如,列:nil
),并期望结果不会返回true;也许您希望确保它是使用有效属性创建的
顺便说一句,因为您使用的是FactoryGirl,所以可以使用(:工厂名称)的“属性”。不,您不一定需要在课程计划工厂中指定用户id;除非您总是希望它引用用户1。您可以简单地引用没有值的用户。查看第3-5部分,特别是第3-5部分,了解RSPec测试的介绍。。当我刚开始学习时,我发现这是一个非常容易遵循的指南。该规范可能会在这一点上失败,因为您需要创建一个没有属性的课程计划。这是有道理的。我将更仔细地看一下。我有一个课程计划模型的测试(通过)。我将尝试使用(:lesson_plan)属性,但我想知道如何传递应该为当前用户创建的课程计划,因为这就是我的控制器创建课程计划的方式:
@lesson_plan=current_user.lesson_plans.new(lesson_plan_params)
我用rSpec购买了《每日测试》一书。我大部分时间都被设计的部分挂住了。每日系列很有帮助。而且。。我建议将config.include FactoryGirl::Syntax::Methods
添加到您的spec助手中。。这允许您调用create()
,build()
等。。如果没有FactoryGirl
前缀,您只需覆盖用户id(或用户..取决于工厂的定义方式和创建新记录的方式)即可将其与用户关联。。。例如create(:课程计划,用户id:user.id)。不要过于担心测试和设计功能。。这就是为什么他们提供帮助器方法,比如
sign_in`。。使用这些帮助程序可以访问应用程序中的特定状态,并测试从那时起您自己的代码应该做什么。找帮手。。您最好的参考将是Desive自己的文档,在指南的测试部分。谢谢您的帮助。我将构建行更改为:lesson\u plan=LessonPlan.create!如您所建议的(:lesson\u plan,:user=>user)
的属性,添加用户参数。
describe LessonPlansController do
let(:valid_attributes) { { } }
let(:valid_session) { {} }
# describe "GET index" do
it "assigns all lesson_plans as @lesson_plans" do
user=FactoryGirl.create(:user)
sign_in user
lesson_plan = LessonPlan.create! valid_attributes
get :index, {}, valid_session
assigns(:lesson_plans).should eq([lesson_plan])
end
end