以下测试表现得很奇怪:
it('Should return the exchange rates for btc_ltc', function(done) {
var pair = 'btc_ltc';
shapeshift.getRate(pair)
.then(function(data){
expect(data.pair).to.equal(pair);
expect(data.rate).to.have.length(400);
done();
})
.catch(function(err){
//this should really be `.catch` for a failed request, but
//instead it looks like chai is picking this up when a test fails
done(err);
})
});
Run Code Online (Sandbox Code Playgroud)
我该如何妥善处理被拒绝的承诺(并对其进行测试)?
我该如何正确处理失败的测试(即:expect(data.rate).to.have.length(400);?
这是我正在测试的实现:
var requestp = require('request-promise');
var shapeshift = module.exports = {};
var url = 'http://shapeshift.io';
shapeshift.getRate = function(pair){
return requestp({
url: url + '/rate/' + pair,
json: true
}); …Run Code Online (Sandbox Code Playgroud) 我有以下ES6模块:
network.js
export function getDataFromServer() {
return ...
}
Run Code Online (Sandbox Code Playgroud)
widget.js
import { getDataFromServer } from 'network.js';
export class Widget() {
constructor() {
getDataFromServer("dataForWidget")
.then(data => this.render(data));
}
render() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来测试Widget的模拟实例getDataFromServer.如果我使用单独的<script>s代替ES6模块,比如在Karma中,我可以编写我的测试:
describe("widget", function() {
it("should do stuff", function() {
let getDataFromServer = spyOn(window, "getDataFromServer").andReturn("mockData")
let widget = new Widget();
expect(getDataFromServer).toHaveBeenCalledWith("dataForWidget");
expect(otherStuff).toHaveHappened();
});
});
Run Code Online (Sandbox Code Playgroud)
但是,如果我在浏览器之外单独测试ES6模块(比如使用Mocha + babel),我会写一些类似于:
import { Widget } from 'widget.js';
describe("widget", function() {
it("should do stuff", function() {
let getDataFromServer = spyOn(?????) …Run Code Online (Sandbox Code Playgroud) 有没有办法轻松重置所有sinon spys模拟和存根,将与mocha的beforeEach块干净地工作.
我看到沙盒是一个选项,但我不知道如何使用沙盒
beforeEach ->
sinon.stub some, 'method'
sinon.stub some, 'mother'
afterEach ->
# I want to avoid these lines
some.method.restore()
some.other.restore()
it 'should call a some method and not other', ->
some.method()
assert.called some.method
Run Code Online (Sandbox Code Playgroud) 我正在使用mocha来单元测试为node.js编写的应用程序
我想知道是否可以对未在模块中导出的单元测试功能进行单元测试.
例:
我有很多像这样定义的函数 foobar.js
function private_foobar1(){
...
}
function private_foobar2(){
...
}
Run Code Online (Sandbox Code Playgroud)
以及一些出口为公共的功能:
exports.public_foobar3 = function(){
...
}
Run Code Online (Sandbox Code Playgroud)
测试用例的结构如下:
describe("private_foobar1", function() {
it("should do stuff", function(done) {
var stuff = foobar.private_foobar1(filter);
should(stuff).be.ok;
should(stuff).....
Run Code Online (Sandbox Code Playgroud)
显然这不起作用,因为private_foobar1没有导出.
对私有方法进行单元测试的正确方法是什么?摩卡有没有一些内置的方法呢?
我有一个代码,其中某些测试将始终在CI环境中失败.我想根据环境条件禁用它们.
如何在运行时执行期间以编程方式跳过mocha中的测试?
完整代码:https://gist.github.com/js08/0ec3d70dfda76d7e9fb4
嗨,
import {expect} from 'chai';
import React from 'react';
import TestUtils from 'react-addons-test-utils';
import {SportsTopPortion} from '../../../src/components/sports-top-portion/sports-top-portion.jsx';
require('../../test-utils/dom');
describe('"sports-top-portion" Unit Tests', function() {
let shallowRenderer = TestUtils.createRenderer();
let sportsContentContainerLayout ='mobile';
let sportsContentContainerProfile = {'exists': 'hasSidebar'};
let sportsContentContainerAuthExchange = {hasValidAccessToken: true};
let sportsContentContainerHasValidAccessToken ='test';
it('should render correctly', () => {
shallowRenderer.render(<SportsTopPortion sportsWholeFramework={sportsContentContainerLayout} sportsPlayers={sportsContentContainerProfile} sportsAuthentication={sportsContentContainerAuthExchange} sportsUpperBar={{activeSportsLink:'test'}} />);
//shallowRenderer.render(<SportsTopPortion sportsWholeFramework={sportsContentContainerLayout} sportsPlayers={sportsContentContainerProfile} hasValidAccessToken={sportsContentContainerHasValidAccessToken} />);
let renderedElement = shallowRenderer.getRenderOutput();
console.log("renderedElement------->" + JSON.stringify(renderedElement));
expect(renderedElement).to.exist;
}); …Run Code Online (Sandbox Code Playgroud) 所以,我正在测试一个依赖于事件发射器的组件.为此,我想出了一个使用Promise with Mocha + Chai的解决方案:
it('should transition with the correct event', (done) => {
const cFSM = new CharacterFSM({}, emitter, transitions);
let timeout = null;
let resolved = false;
new Promise((resolve, reject) => {
emitter.once('action', resolve);
emitter.emit('done', {});
timeout = setTimeout(() => {
if (!resolved) {
reject('Timedout!');
}
clearTimeout(timeout);
}, 100);
}).then((state) => {
resolved = true;
assert(state.action === 'DONE', 'should change state');
done();
}).catch((error) => {
assert.isNotOk(error,'Promise error');
done();
});
});
Run Code Online (Sandbox Code Playgroud)
在控制台上我得到一个'UnhandledPromiseRejectionWarning',即使拒绝函数被调用,因为它立即显示消息'AssertionError:Promise error'
(node:25754)UnhandledPromiseRejectionWarning:未处理的promise拒绝(拒绝id:2):AssertionError:Promise错误:expect {Object(message,showDiff,...)}是假的1)应该转换为正确的事件
然后,在2秒后我得到了
错误:超过2000毫秒的超时.确保在此测试中调用done()回调.
自从执行catch回调以来,这甚至更奇怪.(我认为由于某种原因,断言失败阻止了其余的执行)
现在有趣的是,如果我注释掉 …
我正在使用javascript test-runner"Mocha".
我有一个失败的测试,所以我想使用它进行调试console.log.
但是当测试运行时,没有输出(只有Mocha的测试结果).似乎摩卡已经捕获并压制了我的console.log输出!
如何让Mocha显示我的输出?(对于失败的测试)?
编辑:
巨大的道歉!- console.log在测试期间工作!我一定期待它抑制输出,我没有正确检查自己的代码.谢谢你的回复.所以...说的......也许真的很好地抑制通过测试的输出?嗯...
在相关的说明:我想使用,console.log因为我在尝试让Eclipse调试器连接到node.js时遇到了很多麻烦.
我是唯一发现这个棘手的人吗?你们怎么调试node.js?使用调试器或console.log语句?
是否可以使用Visual Studio Code为Mocha测试添加断点?
通常在调试代码时需要配置launch.json,将program属性设置为要执行的javascript文件.我不知道如何为摩卡做这个.
我正在试图找出如何关闭Express的实例.基本上,我想要.listen(port)调用的反转- 如何让Express服务器停止监听,释放端口,并干净地关闭?
我知道这似乎是一个奇怪的查询,所以这里是上下文; 也许还有另一种方法可以解决这个问题,我认为这是错误的方式.我正在尝试为我的socket.io/nodejs应用程序设置测试框架.这是一个单页面的应用程序,所以在我的测试脚本中(我使用的是Mocha,但这并不重要)我希望能够启动服务器,对它运行测试,然后关闭服务器.我可以通过假设在测试开始之前打开服务器或者让其中一个测试启动服务器并让每个后续测试都认为它已经启动来解决这个问题,但这真的很麻烦.我更希望每个测试文件都使用适当的设置启动服务器实例,然后在测试结束时关闭该实例.这意味着运行测试没有奇怪的依赖关系,一切都很干净.这也意味着我可以进行启动/关机测试.
那么,有关如何做到这一点的任何建议?我已经考虑过手动触发异常以降低异常,但这看起来很混乱.我已经挖掘了Express文档和源代码,但似乎无法找到任何关闭服务器的方法.socket.io中也可能有这样的东西,但由于套接字服务器只是连接到Express服务器,我认为这需要在快速层发生.
mocha.js ×10
node.js ×6
javascript ×5
unit-testing ×3
chai ×2
promise ×2
testing ×2
ecmascript-6 ×1
express ×1
private ×1
reactjs ×1
redux ×1
sinon ×1
stubbing ×1
tdd ×1