Skip to content

Commit b7e9623

Browse files
committed
Replace "should" with "chai"
1 parent 7e54c98 commit b7e9623

38 files changed

+577
-487
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@
4949
},
5050
"devDependencies": {
5151
"c8": "^10.0.0",
52+
"chai": "^6.2.0",
5253
"eslint": "^8.5.0",
5354
"mocha": "^11.0.1",
5455
"nock": "^14.0.0",
55-
"should": "^13.2.3",
5656
"sinon": "^21.0.0"
5757
},
5858
"files": [

test/e2e/e2e-test.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
import 'should';
21
import scrape from 'website-scraper';
32
import fs from 'fs-extra';
3+
import * as chai from 'chai';
44

55
import { readFile } from 'fs/promises';
66
const urls = JSON.parse(await readFile(new URL('./urls.json', import.meta.url)));
77
const options = JSON.parse(await readFile(new URL('./options.json', import.meta.url)));
88

99
const resultDirname = './test/e2e/results';
10+
chai.should();
1011

1112
describe('E2E', function() {
1213
before(function() {
@@ -26,7 +27,7 @@ describe('E2E', function() {
2627
scraperOptions.urls = [ { url: url, filename: 'index.html' } ];
2728
scraperOptions.filenameGenerator = 'byType';
2829
return scrape(scraperOptions).then(function(result) {
29-
result.should.be.ok();
30+
result.should.be.ok;
3031
});
3132
});
3233

@@ -37,7 +38,7 @@ describe('E2E', function() {
3738
scraperOptions.urls = [ { url: url } ];
3839
scraperOptions.filenameGenerator = 'bySiteStructure';
3940
return scrape(scraperOptions).then(function(result) {
40-
result.should.be.ok();
41+
result.should.be.ok;
4142
});
4243
});
4344
});

test/functional/base/base.test.js

Lines changed: 37 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
import should from 'should';
1+
import * as chai from 'chai';
2+
chai.should();
3+
24
import '../../utils/assertions.js';
35
import nock from 'nock';
46
import fs from 'fs-extra';
@@ -72,18 +74,21 @@ describe('Functional: base', function() {
7274
// should return right result
7375
result.should.be.instanceOf(Array).and.have.length(3);
7476

75-
result[0].should.have.properties({ url: 'http://example.com/', filename: 'index.html' });
76-
result[0].should.have.properties('children');
77+
result[0].should.have.property('url', 'http://example.com/');
78+
result[0].should.have.property('filename', 'index.html');
79+
result[0].should.have.property('children');
7780
result[0].children.should.be.instanceOf(Array).and.have.length(4);
7881
result[0].children[0].should.be.instanceOf(Resource);
7982

80-
result[1].should.have.properties({ url: 'http://example.com/about', filename: 'about.html' });
81-
result[1].should.have.properties('children');
83+
result[1].should.have.property('url', 'http://example.com/about');
84+
result[1].should.have.property('filename', 'about.html');
85+
result[1].should.have.property('children');
8286
result[1].children.should.be.instanceOf(Array).and.have.length(4);
8387
result[1].children[0].should.be.instanceOf(Resource);
8488

85-
result[2].should.have.properties({ url: 'http://blog.example.com/', filename: 'blog.html' }); // url after redirect
86-
result[2].should.have.properties('children');
89+
result[2].should.have.property('url', 'http://blog.example.com/'); // url after redirect
90+
result[2].should.have.property('filename', 'blog.html');
91+
result[2].should.have.property('children');
8792
result[2].children.should.be.instanceOf(Array).and.have.length(1);
8893
result[2].children[0].should.be.instanceOf(Resource);
8994

@@ -102,7 +107,7 @@ describe('Functional: base', function() {
102107
// all sources in index.html should be replaced with local paths
103108
let $ = cheerio.load(fs.readFileSync(testDirname + '/index.html').toString());
104109
$('link[rel="stylesheet"]').attr('href').should.be.eql('css/index.css');
105-
$('style').html().should.containEql('img/background.png');
110+
$('style').html().should.contain('img/background.png');
106111
$('img').attr('src').should.be.eql('img/cat.jpg');
107112
$('script').attr('src').should.be.eql('js/script.min.js');
108113

@@ -115,22 +120,22 @@ describe('Functional: base', function() {
115120

116121
// all sources in index.css should be replaces with local files recursively
117122
const indexCss = fs.readFileSync(testDirname + '/css/index.css').toString();
118-
indexCss.should.not.containEql('files/index-import-1.css');
119-
indexCss.should.not.containEql('files/index-import-2.css');
120-
indexCss.should.not.containEql('http://example.com/files/index-image-1.png');
121-
indexCss.should.containEql('index-import-1.css');
122-
indexCss.should.containEql('index-import-2.css');
123-
indexCss.should.containEql('../img/index-image-1.png');
123+
indexCss.should.not.contain('files/index-import-1.css');
124+
indexCss.should.not.contain('files/index-import-2.css');
125+
indexCss.should.not.contain('http://example.com/files/index-image-1.png');
126+
indexCss.should.contain('index-import-1.css');
127+
indexCss.should.contain('index-import-2.css');
128+
indexCss.should.contain('../img/index-image-1.png');
124129

125130
const indexImportCss = fs.readFileSync(testDirname + '/css/index-import-2.css').toString();
126-
indexImportCss.should.not.containEql('http://example.com/files/index-image-2.png');
127-
indexImportCss.should.containEql('../img/index-image-2.png');
131+
indexImportCss.should.not.contain('http://example.com/files/index-image-2.png');
132+
indexImportCss.should.contain('../img/index-image-2.png');
128133

129134
// should deal with base tag in about.html and not load new resources
130135
// all sources in about.html should be replaced with already loaded local resources
131136
$ = cheerio.load(fs.readFileSync(testDirname + '/about.html').toString());
132137
$('link[rel="stylesheet"]').attr('href').should.be.eql('css/index.css');
133-
$('style').html().should.containEql('img/background.png');
138+
$('style').html().should.contain('img/background.png');
134139
$('img').attr('src').should.be.eql('img/cat.jpg');
135140
$('script').attr('src').should.be.eql('js/script.min.js');
136141

@@ -144,21 +149,21 @@ describe('Functional: base', function() {
144149
return scrape({...options, filenameGenerator: 'bySiteStructure'}).then(function(result) {
145150
result.should.be.instanceOf(Array).and.have.length(3);
146151

147-
should(result[0].url).eql('http://example.com/');
148-
should(result[0].filename).equalFileSystemPath('example.com/index.html');
149-
result[0].should.have.properties('children');
152+
result[0].url.should.eql('http://example.com/');
153+
result[0].filename.should.equalFileSystemPath('example.com/index.html');
154+
result[0].should.have.property('children');
150155
result[0].children.should.be.instanceOf(Array).and.have.length(4);
151156
result[0].children[0].should.be.instanceOf(Resource);
152157

153-
should(result[1].url).eql('http://example.com/about');
154-
should(result[1].filename).equalFileSystemPath('example.com/about/index.html');
155-
result[1].should.have.properties('children');
158+
result[1].url.should.eql('http://example.com/about');
159+
result[1].filename.should.equalFileSystemPath('example.com/about/index.html');
160+
result[1].should.have.property('children');
156161
result[1].children.should.be.instanceOf(Array).and.have.length(4);
157162
result[1].children[0].should.be.instanceOf(Resource);
158163

159-
should(result[2].url).eql('http://blog.example.com/'); // url after redirect
160-
should(result[2].filename).equalFileSystemPath('blog.example.com/index.html');
161-
result[2].should.have.properties('children');
164+
result[2].url.should.eql('http://blog.example.com/'); // url after redirect
165+
result[2].filename.should.equalFileSystemPath('blog.example.com/index.html');
166+
result[2].should.have.property('children');
162167
result[2].children.should.be.instanceOf(Array).and.have.length(1);
163168
result[2].children[0].should.be.instanceOf(Resource);
164169

@@ -177,7 +182,7 @@ describe('Functional: base', function() {
177182
// all sources in index.html should be replaced with local paths
178183
let $ = cheerio.load(fs.readFileSync(testDirname + '/example.com/index.html').toString());
179184
$('link[rel="stylesheet"]').attr('href').should.be.eql('index.css');
180-
$('style').html().should.containEql('background.png');
185+
$('style').html().should.contain('background.png');
181186
$('img').attr('src').should.be.eql('cat.jpg');
182187
$('script').attr('src').should.be.eql('script.min.js');
183188

@@ -190,18 +195,18 @@ describe('Functional: base', function() {
190195

191196
// all sources in index.css should be replaces with local files recursively
192197
const indexCss = fs.readFileSync(testDirname + '/example.com/index.css').toString();
193-
indexCss.should.containEql('files/index-import-1.css');
194-
indexCss.should.containEql('files/index-import-2.css');
195-
indexCss.should.containEql('files/index-image-1.png');
198+
indexCss.should.contain('files/index-import-1.css');
199+
indexCss.should.contain('files/index-import-2.css');
200+
indexCss.should.contain('files/index-image-1.png');
196201

197202
const indexImportCss = fs.readFileSync(testDirname + '/example.com/files/index-import-2.css').toString();
198-
indexImportCss.should.containEql('index-image-2.png');
203+
indexImportCss.should.contain('index-image-2.png');
199204

200205
// should deal with base tag in about.html and not load new resources
201206
// all sources in about.html should be replaced with already loaded local resources
202207
$ = cheerio.load(fs.readFileSync(testDirname + '/example.com/about/index.html').toString());
203208
$('link[rel="stylesheet"]').attr('href').should.be.eql('../index.css');
204-
$('style').html().should.containEql('../background.png');
209+
$('style').html().should.contain('../background.png');
205210
$('img').attr('src').should.be.eql('../cat.jpg');
206211
$('script').attr('src').should.be.eql('../script.min.js');
207212

test/functional/base/check-it-works.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import should from 'should';
1+
import * as chai from 'chai';
2+
chai.should();
23
import '../../utils/assertions.js';
34
import nock from 'nock';
45
import fs from 'fs-extra';
@@ -28,9 +29,9 @@ describe('Functional: check it works', function() {
2829
};
2930

3031
return scrape(options).then((result) => {
31-
should(result[0].url).be.eql('http://example.com/');
32-
should(result[0].filename).be.eql('index.html');
33-
should(result[0].text).be.eql('<html><head></head><body>TEST PROMISES</body></html>');
32+
result[0].url.should.be.eql('http://example.com/');
33+
result[0].filename.should.be.eql('index.html');
34+
result[0].text.should.be.eql('<html><head></head><body>TEST PROMISES</body></html>');
3435
});
3536
});
3637
});

test/functional/binary-resources/images.test.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
import should from 'should';
1+
import * as chai from 'chai';
2+
chai.should();
3+
24
import '../../utils/assertions.js';
35
import nock from 'nock';
46
import fs from 'fs-extra';
@@ -63,7 +65,7 @@ describe('Functional: images', () => {
6365
const resultPng = fs.readFileSync(testDirname + '/img/test-image.png');
6466
const resultJpg = fs.readFileSync(testDirname + '/img/test-image.jpg');
6567

66-
should(resultPng).be.eql(originalPng);
67-
should(resultJpg).be.eql(originalJpg);
68+
resultPng.should.be.eql(originalPng);
69+
resultJpg.should.be.eql(originalJpg);
6870
});
6971
});

test/functional/callbacks/callbacks.test.js

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
import should from 'should';
1+
import * as chai from 'chai';
2+
chai.should();
3+
24
import '../../utils/assertions.js';
35
import nock from 'nock';
46
import fs from 'fs-extra';
@@ -45,12 +47,12 @@ describe('Functional: onResourceSaved and onResourceError callbacks in plugin',
4547
};
4648

4749
return scrape(options).then(function() {
48-
should(resourceSavedStub.calledOnce).be.eql(true);
49-
should(resourceSavedStub.args[0][0].resource.url).be.eql('http://example.com/');
50+
resourceSavedStub.calledOnce.should.be.eql(true);
51+
resourceSavedStub.args[0][0].resource.url.should.be.eql('http://example.com/');
5052

51-
should(resourceErrorStub.calledOnce).be.eql(true);
52-
should(resourceErrorStub.args[0][0].resource.url).be.eql('http://nodejs.org/');
53-
should(resourceErrorStub.args[0][0].error.message).be.eql('REQUEST ERROR!!');
53+
resourceErrorStub.calledOnce.should.be.eql(true);
54+
resourceErrorStub.args[0][0].resource.url.should.be.eql('http://nodejs.org/');
55+
resourceErrorStub.args[0][0].error.message.should.be.eql('REQUEST ERROR!!');
5456
});
5557
});
5658

@@ -80,11 +82,11 @@ describe('Functional: onResourceSaved and onResourceError callbacks in plugin',
8082
};
8183

8284
return scrape(options).then(function() {
83-
should(true).eql(false);
85+
false.should.be.true;
8486
}).catch(() => {
85-
should(resourceErrorStub.calledOnce).be.eql(true);
86-
should(resourceErrorStub.args[0][0].resource.url).be.eql('http://nodejs.org/');
87-
should(resourceErrorStub.args[0][0].error.message).be.eql('REQUEST ERROR!!');
87+
resourceErrorStub.calledOnce.should.be.eql(true);
88+
resourceErrorStub.args[0][0].resource.url.should.be.eql('http://nodejs.org/');
89+
resourceErrorStub.args[0][0].error.message.should.be.eql('REQUEST ERROR!!');
8890
});
8991
});
9092
});

test/functional/circular-dependencies/circular-dependencies.test.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
import 'should';
1+
import * as chai from 'chai';
2+
chai.should();
3+
24
import '../../utils/assertions.js';
35
import nock from 'nock';
46
import fs from 'fs-extra';

test/functional/css-handling/css-handling.test.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
import should from 'should';
1+
import * as chai from 'chai';
2+
chai.should();
3+
24
import '../../utils/assertions.js';
35
import nock from 'nock';
46
import fs from 'fs-extra';
@@ -51,10 +53,10 @@ describe('Functional: css handling', function() {
5153

5254
const indexHtml = fs.readFileSync(testDirname + '/index.html').toString();
5355

54-
should(indexHtml).containEql('local/style-tag.png');
55-
should(indexHtml).containEql('local/style-attr.png');
56+
indexHtml.should.contain('local/style-tag.png');
57+
indexHtml.should.contain('local/style-attr.png');
5658

57-
should(indexHtml).containEql('background: url(\'css-like-text-in-html.png\')');
59+
indexHtml.should.contain("background: url('css-like-text-in-html.png')");
5860
});
5961
});
6062
});

test/functional/data-url/data-url.test.js

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
import should from 'should';
1+
import * as chai from 'chai';
2+
chai.should();
3+
24
import '../../utils/assertions.js';
35
import nock from 'nock';
46
import fs from 'fs-extra';
@@ -37,12 +39,12 @@ describe('Functional: data urls handling', function () {
3739

3840
const actualIndexHtml = fs.readFileSync(testDirname + '/index.html').toString();
3941

40-
should(actualIndexHtml).containEql('<source media="(max-width: 559px)" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 1x, data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 2x">');
41-
should(actualIndexHtml).containEql('<source media="(min-width: 560px) and (max-width: 719px)" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 1x, data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 2x">');
42-
should(actualIndexHtml).containEql('<source media="(min-width: 720px) and (max-width: 899px)" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 1x, data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 2x">');
43-
should(actualIndexHtml).containEql('<source media="(min-width: 900px) and (max-width: 1199px)" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 1x, data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 2x">');
44-
should(actualIndexHtml).containEql('<source media="(min-width: 1200px)" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 1x, data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 2x">');
45-
should(actualIndexHtml).containEql('<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" srcset="images/521811121-392x351.jpg 2x">');
42+
actualIndexHtml.should.contain('<source media="(max-width: 559px)" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 1x, data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 2x">');
43+
actualIndexHtml.should.contain('<source media="(min-width: 560px) and (max-width: 719px)" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 1x, data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 2x">');
44+
actualIndexHtml.should.contain('<source media="(min-width: 720px) and (max-width: 899px)" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 1x, data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 2x">');
45+
actualIndexHtml.should.contain('<source media="(min-width: 900px) and (max-width: 1199px)" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 1x, data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 2x">');
46+
actualIndexHtml.should.contain('<source media="(min-width: 1200px)" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 1x, data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 2x">');
47+
actualIndexHtml.should.contain('<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" srcset="images/521811121-392x351.jpg 2x">');
4648
});
4749
});
4850
});

test/functional/encoding/encoding.test.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ describe('Functional: encoding', () => {
3232
await scrape(options);
3333

3434
const scrapedIndex = await fs.readFile(testDirname + '/index.html', { encoding: 'utf8' });
35-
scrapedIndex.should.be.containEql('<div id="special-characters-korean">저는 7년 동안 한국에서 살았어요.</div>');
36-
scrapedIndex.should.be.containEql('<div id="special-characters-ukrainian">Слава Україні!</div>');
37-
scrapedIndex.should.be.containEql('<div id="special-characters-chinese">加入网站</div>');
38-
scrapedIndex.should.be.containEql('<div id="special-characters-ukrainian">Обладнання та ПЗ</div>');
39-
scrapedIndex.should.be.containEql('<div id="special-characters-french">PAR PASSION DU VÉLO</div>');
35+
scrapedIndex.should.contain('<div id="special-characters-korean">\uc800\ub294 7\ub144 \ub3d9\uc548 \ud55c\uad6d\uc5d0\uc11c \uc0b4\uc558\uc5b4\uc694.</div>');
36+
scrapedIndex.should.contain('<div id="special-characters-ukrainian">\u0421\u043b\u0430\u0432\u0430 \u0423\u043a\u0440\u0430\u0457\u043d\u0456!</div>');
37+
scrapedIndex.should.contain('<div id="special-characters-chinese">\u52a0\u5165\u7f51\u7ad9</div>');
38+
scrapedIndex.should.contain('<div id="special-characters-ukrainian">\u041e\u0431\u043b\u0430\u0434\u043d\u0430\u043d\u043d\u044f \u0442\u0430 \u041f\u0417</div>');
39+
scrapedIndex.should.contain('<div id="special-characters-french">PAR PASSION DU V\u00c9LO</div>');
4040
});
4141

4242
it('should save the page with enconding from html meta tag', async () => {
@@ -45,10 +45,10 @@ describe('Functional: encoding', () => {
4545
await scrape(options);
4646

4747
const scrapedIndex = await fs.readFile(testDirname + '/index.html', { encoding: 'utf8' });
48-
scrapedIndex.should.be.containEql('<div id="special-characters-korean">저는 7년 동안 한국에서 살았어요.</div>');
49-
scrapedIndex.should.be.containEql('<div id="special-characters-ukrainian">Слава Україні!</div>');
50-
scrapedIndex.should.be.containEql('<div id="special-characters-chinese">加入网站</div>');
51-
scrapedIndex.should.be.containEql('<div id="special-characters-ukrainian">Обладнання та ПЗ</div>');
52-
scrapedIndex.should.be.containEql('<div id="special-characters-french">PAR PASSION DU VÉLO</div>');
48+
scrapedIndex.should.contain('<div id="special-characters-korean">\uc800\ub294 7\ub144 \ub3d9\uc548 \ud55c\uad6d\uc5d0\uc11c \uc0b4\uc558\uc5b4\uc694.</div>');
49+
scrapedIndex.should.contain('<div id="special-characters-ukrainian">\u0421\u043b\u0430\u0432\u0430 \u0423\u043a\u0440\u0430\u0457\u043d\u0456!</div>');
50+
scrapedIndex.should.contain('<div id="special-characters-chinese">\u52a0\u5165\u7f51\u7ad9</div>');
51+
scrapedIndex.should.contain('<div id="special-characters-ukrainian">\u041e\u0431\u043b\u0430\u0434\u043d\u0430\u043d\u043d\u044f \u0442\u0430 \u041f\u0417</div>');
52+
scrapedIndex.should.contain('<div id="special-characters-french">PAR PASSION DU V\u00c9LO</div>');
5353
});
5454
});

0 commit comments

Comments
 (0)