require 'spec_helper'
module Pronto
- describe ESLint do
- let(:eslint) { ESLint.new(patches) }
+ describe ESLintNpm do
+ let(:eslint) { ESLintNpm.new(patches) }
+ let(:patches) { [] }
describe '#run' do
- subject { eslint.run }
+ subject(:run) { eslint.run }
context 'patches are nil' do
let(:patches) { nil }
- it { should == [] }
+
+ it 'returns an empty array' do
+ expect(run).to eql([])
+ end
end
context 'no patches' do
let(:patches) { [] }
- it { should == [] }
+
+ it 'returns an empty array' do
+ expect(run).to eql([])
+ end
end
- context 'patches with a four and a five warnings' do
+ context 'patches with a one and a four warnings' do
include_context 'test repo'
let(:patches) { repo.diff('master') }
- its(:count) { should == 9 }
- its(:'first.msg') { should == "Expected { after 'if' condition." }
+ it 'returns correct number of errors' do
+ expect(run.count).to eql(5)
+ end
+
+ it 'has correct first message' do
+ expect(run.first.msg).to eql("'foo' is not defined.")
+ end
+
+ context(
+ 'with files to lint config that never matches',
+ config: { 'files_to_lint' => 'will never match' }
+ ) do
+ it 'returns zero errors' do
+ expect(run.count).to eql(0)
+ end
+ end
+
+ context(
+ 'with files to lint config that matches only .js',
+ config: { 'files_to_lint' => '\.js$' }
+ ) do
+ it 'returns correct amount of errors' do
+ expect(run.count).to eql(2)
+ end
+ end
+
+ context(
+ 'with different eslint executable',
+ config: { 'eslint_executable' => './custom_eslint.sh' }
+ ) do
+ it 'calls the custom eslint eslint_executable' do
+ expect { run }.to raise_error(JSON::ParserError, /custom eslint called/)
+ end
+ end
end
- context 'repo with ignored and not ignored file, each with five warnings' do
+ context 'repo with ignored and not ignored file, each with three warnings' do
include_context 'eslintignore repo'
let(:patches) { repo.diff('master') }
- its(:count) { should == 5 }
- its(:'first.msg') { should == "Use the function form of 'use strict'." }
+ it 'returns correct number of errors' do
+ expect(run.count).to eql(3)
+ end
+
+ it 'has correct first message' do
+ expect(run.first.msg).to eql("'HelloWorld' is defined but never used.")
+ end
+ end
+ end
+
+ describe '#files_to_lint' do
+ subject(:files_to_lint) { eslint.files_to_lint }
+
+ it 'matches .js by default' do
+ expect(files_to_lint).to match('my_js.js')
+ end
+
+ it 'matches .es6 by default' do
+ expect(files_to_lint).to match('my_js.es6')
+ end
+ end
+
+ describe '#eslint_executable' do
+ subject(:eslint_executable) { eslint.eslint_executable }
+
+ it 'is `eslint` by default' do
+ expect(eslint_executable).to eql('eslint')
end
end
end