added tests
This commit is contained in:
@ -1,24 +1,59 @@
|
|||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
|
|
||||||
describe Assessor do
|
describe Assessor do
|
||||||
|
let(:assessor) { described_class.new(execution_environment: FactoryGirl.build(:ruby)) }
|
||||||
|
|
||||||
|
describe '#assess' do
|
||||||
|
let(:assess) { assessor.assess(stdout: stdout) }
|
||||||
|
let(:stdout) { "Finished in 0.1 seconds (files took 0.1 seconds to load)\n2 examples, 1 failure" }
|
||||||
|
|
||||||
|
context 'when an error occurs' do
|
||||||
|
before(:each) do
|
||||||
|
expect_any_instance_of(TestingFrameworkAdapter).to receive(:test_outcome).and_raise
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'catches the error' do
|
||||||
|
expect { assess }.not_to raise_error
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns a score of zero' do
|
||||||
|
expect(assess).to eq(score: 0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when no error occurs' do
|
||||||
|
after(:each) { assess }
|
||||||
|
|
||||||
|
it 'utilizes the testing framework adapter' do
|
||||||
|
expect(assessor.instance_variable_get(:@testing_framework_adapter)).to receive(:test_outcome)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'calculates the score' do
|
||||||
|
expect(assessor).to receive(:calculate_score)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '#calculate_score' do
|
describe '#calculate_score' do
|
||||||
let(:count) { 42 }
|
let(:count) { 42 }
|
||||||
let(:passed) { 17 }
|
let(:passed) { 17 }
|
||||||
let(:test_outcome) { {count: count, passed: passed} }
|
let(:test_outcome) { {count: count, passed: passed} }
|
||||||
|
|
||||||
context 'with a testing framework adapter' do
|
|
||||||
let(:assessor) { described_class.new(execution_environment: FactoryGirl.build(:ruby)) }
|
|
||||||
|
|
||||||
it 'returns the correct score' do
|
it 'returns the correct score' do
|
||||||
expect(assessor.send(:calculate_score, test_outcome)).to eq(passed.to_f / count.to_f)
|
expect(assessor.send(:calculate_score, test_outcome)).to eq(passed.to_f / count.to_f)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'without a testing framework adapter' do
|
describe '#initialize' do
|
||||||
let(:assessor) { described_class.new(execution_environment: FactoryGirl.build(:execution_environment)) }
|
context 'with an execution environment with a testing framework adapter' do
|
||||||
|
it 'assigns the testing framework adapter' do
|
||||||
|
expect(assessor.instance_variable_get(:@testing_framework_adapter)).to be_an(RspecAdapter)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with an execution environment without a testing framework adapter' do
|
||||||
it 'raises an error' do
|
it 'raises an error' do
|
||||||
expect { assessor.send(:calculate_score, test_outcome) }.to raise_error
|
expect { described_class.new(execution_environment: FactoryGirl.build(:ruby, testing_framework: nil)) }.to raise_error(Assessor::Error)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Reference in New Issue
Block a user