You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
3.3 KiB
93 lines
3.3 KiB
var stringSimilarity = require('./compare-strings');
|
|
|
|
describe('compareTwoStrings', function () {
|
|
var compareTwoStrings = stringSimilarity.compareTwoStrings;
|
|
|
|
it('is a function', function () {
|
|
expect(typeof compareTwoStrings).toBe('function');
|
|
});
|
|
|
|
it('returns the correct value for different inputs:', function () {
|
|
const testData = [
|
|
{first: 'french', second: 'quebec', expected: 0},
|
|
{first: 'france', second: 'france', expected: 1},
|
|
{first: 'fRaNce', second: 'france', expected: 1},
|
|
{first: 'healed', second: 'sealed', expected: 0.8},
|
|
{first: 'web applications', second: 'applications of the web', expected: 0.896551724137931},
|
|
{first: 'this will have a typo somewhere', second: 'this will huve a typo somewhere', expected: 0.9},
|
|
{first: 'this has one extra word', second: 'this has one word', expected: 0.8333333333333334},
|
|
{first: 'a', second: 'a', expected: 1},
|
|
{first: 'a', second: 'b', expected: 0},
|
|
{first: '', second: '', expected: 1},
|
|
{first: 'a', second: '', expected: 0},
|
|
{first: '', second: 'a', expected: 0}
|
|
];
|
|
|
|
testData.forEach(td => {
|
|
expect(compareTwoStrings(td.first, td.second)).toEqual(td.expected);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('findBestMatch', function () {
|
|
var findBestMatch = stringSimilarity.findBestMatch;
|
|
var badArgsErrorMsg = 'Bad arguments: First argument should be a string, second should be an array of strings';
|
|
|
|
it('is a function', function () {
|
|
expect(typeof findBestMatch).toBe('function');
|
|
});
|
|
|
|
it('accepts a string and an array of strings and returns an object', function () {
|
|
var output = findBestMatch('one', ['two', 'three']);
|
|
expect(typeof output).toBe('object');
|
|
});
|
|
|
|
it("throws a 'Bad arguments' error if no arguments passed", function () {
|
|
expect(function () {
|
|
findBestMatch();
|
|
}).toThrowError(badArgsErrorMsg);
|
|
});
|
|
|
|
it("throws a 'Bad arguments' error if first argument is not a non-empty string", function () {
|
|
expect(function () {
|
|
findBestMatch('');
|
|
}).toThrowError(badArgsErrorMsg);
|
|
|
|
expect(function () {
|
|
findBestMatch(8);
|
|
}).toThrowError(badArgsErrorMsg);
|
|
});
|
|
|
|
it("throws a 'Bad arguments' error if second argument is not an array with at least one element", function () {
|
|
expect(function () {
|
|
findBestMatch('hello', 'something');
|
|
}).toThrowError(badArgsErrorMsg);
|
|
|
|
expect(function () {
|
|
findBestMatch('hello', []);
|
|
}).toThrowError(badArgsErrorMsg);
|
|
});
|
|
|
|
it("throws a 'Bad arguments' error if second argument is not an array of strings", function () {
|
|
expect(function () {
|
|
findBestMatch('hello', [2, 'something']);
|
|
}).toThrowError(badArgsErrorMsg);
|
|
});
|
|
|
|
it('assigns a similarity rating to each string passed in the array', function () {
|
|
var matches = findBestMatch('healed', ['mailed', 'edward', 'sealed', 'theatre']);
|
|
|
|
expect(matches.ratings).toEqual([
|
|
{target: 'mailed', rating: 0.4},
|
|
{target: 'edward', rating: 0.2},
|
|
{target: 'sealed', rating: 0.8},
|
|
{target: 'theatre', rating: 0.36363636363636365}
|
|
]);
|
|
});
|
|
|
|
it("returns the best match and it's similarity rating", function () {
|
|
var matches = findBestMatch('healed', ['mailed', 'edward', 'sealed', 'theatre']);
|
|
|
|
expect(matches.bestMatch).toEqual({target: 'sealed', rating: 0.8});
|
|
});
|
|
});
|
|
|