Should断言库测试未达预期,请求问题原因排查指导
从Assert转Should.js后测试无法运行的排查与解决
嘿,刚从Assert切换到Should.js遇到测试跑不起来的问题太正常了,毕竟两者的断言思路差得还挺多的。先看你贴的代码,首先就能发现一个明显的问题——Profile_test.js里的第二个describe只写了一半,连函数体都没写完,这肯定会直接导致语法错误,测试根本没法执行。除此之外,还有几个常见的坑咱们一起捋捋:
常见问题与解决步骤
补全测试代码的结构
Should.js依赖Mocha这类测试框架的describe/it结构,你的测试代码必须有完整的测试用例块,不能像你贴的那样只写一半describe...就停了。确认依赖安装正确
别漏了安装Should.js和测试框架(比如Mocha),执行下面的命令确保依赖都装好了:npm install mocha should --save-dev适应Should.js的链式断言语法
和Assert的直接调用函数不同,Should.js是给对象挂载了should属性,用链式调用写断言,这是最容易踩坑的地方,得切换下思路。
完整的可运行测试示例
把你的Profile_test.js改成下面这样,应该就能正常运行了:
let should = require('should'); let Profile = require('../lib/entities/Profile'); describe('Profile', function() { // 测试构造函数的初始化行为 describe('#constructor()', function() { it('should set all input properties correctly when creating a Profile instance', function() { // 创建测试用的Profile实例 const testProfile = new Profile('Dev Profile', 'codeNerd', 'dev@example.com', 'TypeScript'); // 用Should.js的链式断言验证属性 testProfile.should.be.an.instanceOf(Profile); testProfile.profile_name.should.equal('Dev Profile'); testProfile.user_name.should.equal('codeNerd'); testProfile.email.should.equal('dev@example.com'); testProfile.language.should.equal('TypeScript'); }); }); });
运行测试的正确方式
在你的package.json里添加测试脚本:
{ "scripts": { "test": "mocha Profile_test.js" // 如果测试文件在子目录,就写对应路径,比如 "./test/Profile_test.js" } }
然后在终端执行:
npm test
额外小提示
如果遇到对象没有should属性的报错,可以试试另一种写法:不用链式调用,而是把对象传给should()函数,比如:
should(testProfile.profile_name).equal('Dev Profile');
这种写法有时候能解决一些环境下的属性挂载问题。
内容的提问来源于stack exchange,提问作者Edvaldo Silva de Almeida Jr
相关产品推荐
相关产品推荐

