我整个早上一直在打我的脑袋,我很确定我只是错过了一些简单的事情。当我期待一个字符串时,似乎我得到一个新对象({})作为返回值,但即使我为返回值硬编码一个字符串,我也得到相同的错误。
我已经毫无困难地完成了examples found here的工作。我的package.json
设置为正确测试(或者至少我不认为这是问题所在,但我也可以发布它,如果它可以帮我解决问题)。我是Node.js的新手(但对JS很有经验)&只是学习Mocho&柴
我错过了什么?当我得到一个字符串时,为什么我会得到看似空的对象?是什么导致测试失败?
我已经编写了一个简单的API来从主机PC获取用户名:
const username = require('username');
exports.getUserName = function() {
console.log(username.sync());
return username.sync();
};
我已经使用Mocha& amp;编写了一个测试柴:
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)
如果我将测试更改为期望对象,则测试有效:expect(getUserName).to.be.an('object');
。
但是,如果我执行console.log(typeof username.sync());
,则说它是一个字符串。
我需要做些什么来解决这个问题?
编辑解决方案:
这是我最终开始工作的代码。我认为问题的一部分是一个路径问题(我在Windows环境中),部分我根本就不太了解需要做什么,最后我不理解如何在测试中正确调用函数(参见下文)。
以下是修改后的username.js
代码:
const username = require('username');
exports.getUserName = function() {
console.log(username.sync());
return username.sync();
}
此处修改了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');
});
});
答案 0 :(得分:2)
您没有执行该功能
更改
expect(getUserName).to.be.a('string');
到
expect(getUserName()).to.be.a('string');
修改强>
我不知道你正在导出一个物体
exports.getUsername = function(){...}
应该是
expect(getUserName.getUserName()).to.be.a('string');
感谢@robertklep