Node.js Mocha断言错误:预期{}为字符串
我整个上午都在为此绞尽脑汁,我很确定我只是错过了一些简单的事情。当我需要一个字符串时,我似乎得到了一个新对象({})作为返回值,但即使我硬编码一个字符串作为返回值,我也会得到同样的错误 我顺利地完成了这项工作。我的Node.js Mocha断言错误:预期{}为字符串,node.js,mocha.js,Node.js,Mocha.js,我整个上午都在为此绞尽脑汁,我很确定我只是错过了一些简单的事情。当我需要一个字符串时,我似乎得到了一个新对象({})作为返回值,但即使我硬编码一个字符串作为返回值,我也会得到同样的错误 我顺利地完成了这项工作。我的package.json设置为正确测试(或者至少我认为这不是问题所在,但如果它有助于解决我的问题,我也可以发布它)。我是Node.js新手(但对js很有经验)&只是在学习Mocho和Chai 我错过了什么?为什么我应该得到一个字符串,却得到了一个看似空的对象?是什么导致测试失败的 我编
package.json
设置为正确测试(或者至少我认为这不是问题所在,但如果它有助于解决我的问题,我也可以发布它)。我是Node.js新手(但对js很有经验)&只是在学习Mocho和Chai
我错过了什么?为什么我应该得到一个字符串,却得到了一个看似空的对象?是什么导致测试失败的
我编写了一个简单的API,用于从主机PC获取用户名:
const username = require('username');
exports.getUserName = function() {
console.log(username.sync());
return username.sync();
};
我用摩卡和柴做了一个测试:
var expect = require("chai").expect;
var getUserName = require('./username.js');
describe("User name API", function () {
it("Returns a string with the user's name", function () {
expect(getUserName).to.be.a('string');
});
});
以下是使用npm test
运行测试时返回的错误:
> sbserialwidget@0.0.1 test C:\deg\node_modules\sbSerialWidget
> mocha --reporter spec
running
User name API
1) Returns a string with the user's name
0 passing (13ms)
1 failing
1) User name API Returns a string with the user's name:
AssertionError: expected {} to be a string
at Context.<anonymous> (C:\deg\node_modules\sbSerialWidget\test\username.js:6:29)
at callFn (C:\deg\node_modules\sbSerialWidget\node_modules\mocha\lib\runnable.js:334:21)
at Test.Runnable.run (C:\deg\node_modules\sbSerialWidget\node_modules\mocha\lib\runnable.js:327:7)
at Runner.runTest (C:\deg\node_modules\sbSerialWidget\node_modules\mocha\lib\runner.js:429:10)
at C:\deg\node_modules\sbSerialWidget\node_modules\mocha\lib\runner.js:535:12
at next (C:\deg\node_modules\sbSerialWidget\node_modules\mocha\lib\runner.js:349:14)
at C:\deg\node_modules\sbSerialWidget\node_modules\mocha\lib\runner.js:359:7
at next (C:\deg\node_modules\sbSerialWidget\node_modules\mocha\lib\runner.js:285:14)
at Immediate._onImmediate (C:\deg\node_modules\sbSerialWidget\node_modules\mocha\lib\runner.js:327:5)
下面是修改后的usernametest.js
:
var expect = require("chai").expect;
//here's where one point of confusion was, I was trying to call the original getUserName()
//function, but it's been turned into a variable called username
var username = require('..\\js\\username.js').getUserName;
describe("User name API", function () {
it("returns a string with the user's name", function () {
//so here, instead of calling username.getUserName(), I call username()
//instead. Voila, it works...
expect(username()).to.be.a('string');
});
});
您没有执行该函数 改变 expect(getUserName.to.be.a('string')代码> 到
expect(getUserName()).to.be.a('string')代码>
编辑
我不知道你是在导出一个对象
exports.getUsername=function(){…}
应该是
expect(getUserName.getUserName()).to.be.a('string')代码>
感谢@robertklep您没有执行该函数
改变
expect(getUserName.to.be.a('string')代码>
到
expect(getUserName()).to.be.a('string')代码>
编辑
我不知道你是在导出一个对象
exports.getUsername=function(){…}
应该是
expect(getUserName.getUserName()).to.be.a('string')代码>
感谢@robertklep不仅如此,还有username.js
导出了一个名为getUserName
的函数的对象,所以要让它工作,它应该是getUserName.getUserName()
。当我尝试这样做时,错误变为:TypeError:getUserName不是函数
。另外,作为对@robertklep的回应,做出这样的改变也会产生类似的错误:TypeError:getUserName.getUserName不是一个函数
@delliottg,有@stalin和我自己提出的修复方案,对我来说效果很好。嗯,我不确定这是怎么搞砸的。我构建了一个全新的项目,复制了相关文件,在所需的库上运行了npm install
,编辑了package.json
,以指向测试的正确位置,我仍然收到相同的TypeError消息。想法?感谢大家的帮助和建议,我终于找到了一个解决方案(见编辑的OP)。不仅如此,还有username.js
导出一个名为getUserName
的函数的对象,所以要让它工作,应该是getUserName.getUserName()
。当我尝试时,错误更改为:TypeError:getUserName不是函数。另外,作为对@robertklep的回应,做出这样的改变也会产生类似的错误:TypeError:getUserName.getUserName不是一个函数
@delliottg,有@stalin和我自己提出的修复方案,对我来说效果很好。嗯,我不确定这是怎么搞砸的。我构建了一个全新的项目,复制了相关文件,在所需的库上运行了npm install
,编辑了package.json
,以指向测试的正确位置,我仍然收到相同的TypeError消息。想法?感谢大家的帮助和建议,我终于找到了解决方案(见编辑的OP)。
var expect = require("chai").expect;
//here's where one point of confusion was, I was trying to call the original getUserName()
//function, but it's been turned into a variable called username
var username = require('..\\js\\username.js').getUserName;
describe("User name API", function () {
it("returns a string with the user's name", function () {
//so here, instead of calling username.getUserName(), I call username()
//instead. Voila, it works...
expect(username()).to.be.a('string');
});
});