Introduction

edit

This page provides a description of the Expertiza based OSS project. Expertiza is an open source rails application developed on ruby and rails. The application allows students to submit and peer-review learning objects (articles, code, web sites, etc). The instructors can create assignments using this application and customize and manage them. It also helps to introduce the peer review system by which students can review the projects of their colleagues.

Problem Statement

edit

We were expected to write a feature test which mocks the creation of an Assignment. For Expertiza Assignment management is the central part of the workflow. Goals:

  1. Understand the flow of the Assignment creation by instructor manually.
  2. Mock the same steps using capybara
  3. Create multiple assignments with different options and testing their existence.
edit

Classes Involved

edit
  • assignment_creation.rb
  • spec_helper.rb
  • rails_helper.rb

The assignment_creation.rb contains the feature tests written to test the creation of the assignment. The rails_helper is copied to spec/ when you run 'rails generate rspec:install'. All the rspec-expectations config goes into the spec_helper_file. We have used Capybara and RSpec to test our application. Capybara helps you test web applications by simulating how a real user would interact with your app.

Code

edit

assignment_creation.rb

edit
require 'rails_helper'
require 'spec_helper'

def GenerateAssignmentName()
	(rand(1000) + 1).to_s + 'RSpecID' + (1 + rand(1000)).to_s
end

RSpec.feature "create private assignment"  do
    before(:each) do |example|
      unless example.metadata[:skip_before]
         visit root_path
         fill_in('login_name', :with => 'instructor6')
         fill_in('login_password', :with => 'password')
         click_on('SIGN IN')
         expect(page).to have_content('Manage')
         within(".content") do
         click_on("Assignments")
         click_button 'New private assignment'
         fill_in('assignment_form_assignment_name',:with => GenerateAssignmentName())
         select('CSC 517 Fall 2010', from: 'assignment_form_assignment_course_id')
         fill_in('assignment_form_assignment_directory_path',:with => '/')
         fill_in('assignment_form_assignment_spec_location',:with => 'google.com')
         end
      end 
    end
scenario "Create Assignment with Has teams?", :js => true  do        
            uncheck('assignment_form_assignment_availability_flag')
            check('team_assignment')
            click_on('Create')
            click_on('Rubrics')
            within('#questionnaire_table_ReviewQuestionnaire') do
             select('Animation', from: 'assignment_form[assignment_questionnaire][][questionnaire_id]').first()
            end

            within('#questionnaire_table_ReviewQuestionnaire') do
              select('Animation', from: 'assignment_form[assignment_questionnaire][][questionnaire_id]')
            end
            within('#questionnaire_table_AuthorFeedbackQuestionnaire') do
              select('Author feedback OTD1', from: 'assignment_form[assignment_questionnaire][][questionnaire_id]')
            end
            expect(page).to have_content("Rubrics")
            click_on('submit_btn')
            expect(page).to have_content("successfully",:wait=>5)
        end

        scenario "Create Assignment with Has quiz?", :js => true  do
            uncheck('assignment_form_assignment_availability_flag')
            check('assignment_form_assignment_require_quiz')
            click_on('Create')
            click_on('Rubrics')
            within('#questionnaire_table_ReviewQuestionnaire') do
             select('Animation', from: 'assignment_form[assignment_questionnaire][][questionnaire_id]').first()
            end

            within('#questionnaire_table_ReviewQuestionnaire') do
              select('Animation', from: 'assignment_form[assignment_questionnaire][][questionnaire_id]')
            end
            within('#questionnaire_table_AuthorFeedbackQuestionnaire') do
              select('Author feedback OTD1', from: 'assignment_form[assignment_questionnaire][][questionnaire_id]')
            end
            expect(page).to have_content("Rubrics")
            click_on('submit_btn')
            expect(page).to have_content("successfully",:wait=>5)
        end 
end

Given above is a portion of the code written in the assignment_creation.rb. First include the rails_helper and the spec_helper files. After that we write a behavior for our test, which in this case is "creating a private assignment". Now before running each scenario we have to ensure that the instructor is logged in so that each he can create the assignment. This is written in the before(:each) block. After this, we test different scenarios

spec_helper.rb

edit

rails_helper.rb

edit