我应该怎样用mocha和chai测试我的承诺失败了?
我很困惑,因为我最初认为我应该使用'mocha-as-promised',但是该软件包现在已被弃用(我正在使用mocha 2.1.0),建议只使用现在内置的promise测试摩卡.请参阅:https://github.com/domenic/mocha-as-promised
另一篇文章建议废除it()回调的'done'参数 - 不确定我理解为什么,因为我的理解是传递'done'参数是表示测试是异步测试的方式.请参阅:如何使用mocha和chai正确测试承诺?
无论如何,我试图将我的问题减少到下面的代码 - 请帮我修改这个,以便我可以测试我的承诺确实失败了.
it.only("do something (negative test)", function (done) {
var Q = require('q');
function makePromise() {
var deferred = Q.defer();
deferred.reject(Error('fail'));
return deferred.promise;
};
makePromise()
.then(done, done);
});
Run Code Online (Sandbox Code Playgroud) 我正在构建一个包含2个片段的(主 - 细节)视图:ListFragment和更详细的片段视图.单击列表中的任何项目都会显示详细信息视图.对于ListFragment,我使用的是LoaderManager与CursorLoader,来管理我的查询(我一直在下面的亚历克斯·洛克伍德帖子关于这一主题的优秀指南).
当涉及到显示"详细信息"视图(通过单击列表视图)时,我需要查询相同的内容提供者,并获取单行信息.我不确定如何最好地处理这个问题.
因为我基本上回到了一行,并且可以立即释放光标:
我想知道是否有一种方法可以让 mocha 列出它将执行的所有测试。当我使用 mocha --help; 列出它们时,我没有看到任何合理的选项;有几个报告器,但似乎没有一个旨在列出将要处理的文件(或命名将要运行的测试)。
我正在尝试创建一个可读流,其中数据以突发方式到达,数据包之间有延迟(例如在网络读取中)。
我在开玩笑地测试这个时遇到了麻烦。我在下面编写了 2 个测试 两个测试中的第一个有效(因为它向控制台产生输出),但第二个失败 - 也就是说,在控制台上看不到输出。我也尝试过使用 fakeTimers,但似乎没什么区别。任何指针将不胜感激。
测试本身没有依赖性 - 所以代码应该独立运行
const Readable = require('stream').Readable
function sleep(ms) {return new Promise(resolve => setTimeout(resolve, ms))}
const lines = ['line 1\n', 'line 2\nline 3']
function* getIter() {for (let line of lines) {yield line}}
describe ('Iteration', () => {
it ('read iter values from stream', () => {
let rs = new Readable, res, iter = getIter()
while (res = iter.next()) {
if (res.done) {
rs.push(null)
break
} else {
rs.push(res.value)
}
}
rs.pipe(process.stdout) …
Run Code Online (Sandbox Code Playgroud) 如果我使用$ interval创建一个promise,它是可取消的请参阅:http://jsbin.com/jeweke/2/
timer = $interval(intervalFunc, intervalDelay, 10);
timer.then(
function(res) {console.log('ok', res);},
function(err) {console.log('err', err);}
);
Run Code Online (Sandbox Code Playgroud)
但是,如果我将承诺链接起来,则返回的承诺不可取消.见:http://jsbin.com/jeweke/1/
timer = $interval(intervalFunc, intervalDelay, 10)
.then(
function(res) {console.log('ok', res);},
function(err) {console.log('err', err);}
);
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?这是它应该如何工作吗?
注意 - 这里的例子很容易改编自http://jsfiddle.net/ExpertSystem/fZc3W/
我如何匹配最后一行末尾没有换行符的文件。当我使用注释行(w/EOF)时,解析器进入看起来像无限循环的状态(即挂起)。
这是语法 - 大部分借用自 tparr 的作品
grammar csv;
prog : row+ ;
row : field (',' field)* NL;
// row : field (',' field)* (NL|EOF); // doesn't work
field : STR | QSTR | ; // field can be empty
STR : ~[\n,"]+ ;
QSTR : Q (QQ|~'"')* Q ;
NL : '\n';
fragment QQ : '""' ;
fragment Q : '"' ;
Run Code Online (Sandbox Code Playgroud)
这是相应的数据文件。
Details,Month,Amount
Mid Bonus,June,"$2,000"
,January,"""zippo"""
Total Bonuses,"","$5,000"<EOF is on the same line>
Run Code Online (Sandbox Code Playgroud) 我试图匹配字典中的单词,不区分大小写.我最初的方法是这样的:
是否有更好(更有效)的方法来实现这一目标?我是Haskell的新手.
import System.IO
import Data.Text (toLower, pack, unpack)
import Data.Set (fromList, member)
main = do
let path = "/usr/share/dict/american-english"
h <- openFile path ReadMode
hSetEncoding h utf8
contents <- hGetContents h
let mySet = (fromList . map (unpack . toLower . pack) . lines) contents
putStrLn $ show $ member "acadia" mySet
Run Code Online (Sandbox Code Playgroud) 看起来像一个非常基本的问题,但如果我有:
data LogLevel = Info | Warning | Error Int
x = Info
y = Error 13
Run Code Online (Sandbox Code Playgroud)
我可以写
if (x==Info)
Run Code Online (Sandbox Code Playgroud)
但是我如何为类型Error编写测试?