TypeError: expect(...).to.startsWith is not a function - chai and chakram
I am living with following solution without any external dependency
expect(result.startsWith("string to match")).to.be.true;
It may sounds obvious...but did you install the package? (npm -i chai-string)
I just ran into the same issue with Typescript code (Typescript transpiler was outputting an error). It's probably not the exact same issue as yours, but it might help others:
I finally realized that both chai-string
and @types/chai-string
packages have to be installed to make it work.
I'm now able to write something like:
import { expect } from 'chai';
const chai = require('chai');
chai.use(require('chai-string'));
expect(response.body.message).to.startWith('https://images.dog.ceo/breeds/');
which I find more readable and cleaner
You don't need chai-string you can just do:
expect(response.body.message).to.be.a('string').and.satisfy(msg => msg.startsWith('https://images.dog.ceo/breeds/'));
Can even do regex in that satisfy
.
Or better then this, just use match
:
const { escapeRegExp } = require('lodash');
expect(response.body.message).to.be.a('string').and.match(/^https:\/\/images\.dog\.ceo\/breeds\//i);
expect(response.body.message).to.be.a('string').and.match(new RegExp('^' + escapeRegExp('https://images.dog.ceo/breeds/'), 'i')); // this is preferred way so you don't have to worry about escaping, rely on lodash method to escape