我用夜视仪进行集成测试。一些UI自动化,工作正常。最后,如果UI操作的结果是正确的,我想使用Rest API进行检查。我试着在那里使用柴,因为柴是建在夜班中。开箱即用的守夜人只支持expect.element(' #element')...,但我需要期望(真实).to.be.true风格。
这是我测试文件的(部分):
const { expect } = require('chai');
module.exports = {
'Add Rules (Tester 1)' : browser => {
... some tests
}
after: browser => {
let username = 'username';
let password = 'xxxxxxxx';
fetchRulesFromJira({ browser, username, password }).then(rules => {
expect(rules.length).to.equal(2);
browser.end();
});
}
};
如果期望失败,则输出
(node:3594)UnhandledPromiseRejectionWarning:未处理的承诺 rejection(拒绝id:1):AssertionError:预期3等于2
不知何故有用但不好看。如果测试成功,则没有输出。
如何让nightwatch.js打印结果,或以其他方式获得更标准的测试结果输出?
答案 0 :(得分:1)
我同意,如果expect
断言不仅可以用于元素,那将会很好。我使用的解决方法是browser.verify.ok()
,然后我只添加一条描述测试实际执行情况的消息,这样当我查看结果时,我可以看到它是什么测试。在你的情况下,它将是这样的:
browser.verify.ok(rules.length === 2, 'there are 2 rules');
在控制台中,您会看到如下消息:
Passed [ok]: there are 2 rules
虽然,我认为上述方法根本不会处理您的承诺拒绝问题。您可以在catch
之后添加then
,这将解决您未处理的承诺拒绝问题。这是处理被拒绝承诺的正确方法。
fetchRulesFromJira({ browser, username, password }).then(rules => {
expect(rules.length).to.equal(2);
browser.end();
})
.catch(err => {
browser.assert.fail(err);
});
此外,在再次查看您的代码后,我还有最后一件事要提。您正试图在after
方法中进行断言。这将在所有测试完成后运行。通常,您会使用after
函数进行某种清理或拆卸。我仍然是守夜人的新手,但我不认为将断言放在那里是最好的做法。此外,我不完全确定他们甚至可以使用before[Each]
或after[Each]
函数。如果将该断言置于测试函数中,则应该开始在控制台中看到输出。
答案 1 :(得分:0)
我目前的解决方案是将expect
封装在try / catch中,并使用nightwatch调用错误。
const { expect } = require('chai');
module.exports = {
'Add Rules (Tester 1)' : browser => {
... some tests
}
after: browser => {
let username = 'username';
let password = 'xxxxxxxx';
fetchRulesFromJira({ browser, username, password }).then(rules => {
try {
expect(rules.length).to.equal(2);
} catch(error) {
browser.assert.fail(error);
}
browser.end();
});
}
};
这看起来并不完美,但输出相当不错。