どうも、N高生のゆういちです。
見慣れないエラー文を直面したので、その解消法をご紹介します。
N予備校アプリのプログラミング授業より「XSSの脆弱性対策」で、
脆弱性が正しくできているかどうかを意図的に試すことをしました。
その際にテスト中に起こったエラーを解消したことを書きます。
該当のエラー文が以下です。
assert.js:350
throw err;
^
AssertionError [ERR_ASSERTION]: The expression evaluated to a falsy value:
assert(html.includes("<script>alert(\'test\');</script>"))
at Object.<anonymous> (/home/vagrant/workspace/secret-board-3028/test.js:19:1)
<以下略>
AssertionError [ERR_ASSERTION]: The expression evaluated to a falsy value:
と出ましたが、「テストしたところ、falseという値を返します」と言われましたね。
値が合致していないということかな?
該当コード
'use strict';
const pug = require('pug');
const assert = require('assert');
const html = pug.renderFile('./views/posts.pug', {
posts: [
{
id: 1,
content: "<script>alert(\'test\'); </script>",
postedBy: 'guest1',
trackingCookie: 1,
createdAt: new Date(),
updatedAt: new Date()
}
],
user: 'guest1'
});
assert(html.includes("<script>alert(\'test\');</script>"));
console.log('テストが正常に完了しました');
投稿を表すオブジェクトのcontentプロパティにscriptタグを入れて、assert関数によってその文字列が含まれているかどうかを判定します。
解決したこと
contentプロパティの"<script>alert(\'test\'); </script>"
の、;と<の間に1つ半角スペースが入ってあるのが気になったので、これを消して再度テストを実行。
$ node test.js
テストが正常に完了しました
無事に実行できました。単純な記述ミスでしたので早めに気づいてよかったです。
assertはfalseの時はエラーメッセージが返ってくるということをヒントに、文字列が間違っているのかなと仮説を立てたことでなんとか実現したいことができました。
初歩的ながら記述やスペルが合っているかを確認することは大事だと気づかされました。
ではまた!