我想得到诺言的结果 before
describe('unsubscribe', function() {
var arn;
this.timeout(10000);
before(function(done) {
sns.subscribe('param1', 'param2').then(
(result) => {
arn = result;
done();
},
(error) => {
assert.fail(error);
done();
});
});
it('("param") => promise returns object', function() {
const result = sns.unsubscribe(arn);
expect(result).to.eventually.be.an('object');
});
});
同样,after
我想在测试中得到承诺的结果
describe('subscribe', function() {
var arn;
this.timeout(10000);
it('("param1","param2") => promise returns string', function(done) {
sns.subscribe('param1', 'param2').then(
(result) => {
arn = result;
expect(result).to.be.a('string');
},
(error) => {
assert.fail(error);
done();
});
});
after(function(done) {
sns.unsubscribe(arn).then(
(result) => done());
});
});
这段代码编写正确吗?有没有更好的做法?推荐的做法是什么?
您想让摩卡咖啡在每个地方等待诺言解决的地方,您应该只兑现诺言而不是使用done
。因此,您的before
钩子可以简化为:
before(() => sns.subscribe('param1', 'param2')
.then((result) => arn = result));
这比在done
这里和那里并且为错误情况做任何特殊的事情更具可读性。如果有错误,则诺言将被拒绝,摩卡(Mocha)将捕获并报告错误。无需执行自己的断言。
您有一个测试和一个after
钩子,也可以通过仅返回它们使用的promise而不是using来简化done
。如果您的测试取决于承诺,请记住将其退还。您在其中一项测试中忘记了它:
it('("param") => promise returns object', function() {
const result = sns.unsubscribe(arn);
// You need the return on this next line:
return expect(result).to.eventually.be.an('object');
});
提示:如果您有一个测试套件,其中所有测试都是异步的,则可以使用该--async-only
选项。这将使Mocha需要进行所有测试才能调用done
或返回承诺,并且可以帮助发现您忘记了返回承诺的情况。(否则,如果不引发任何错误,这种情况就很难处理。)
在回调中定义一个变量describe
并将其设置在一个before/beforeEach
钩子中并在钩子中检查它after/afterEach
是在钩子和测试之间传递数据的标准方法。Mocha没有为此提供特殊的设施。因此,是的,如果您需要传递数据(这是诺言的结果),则需要.then
像执行操作一样执行分配。您可能会遇到一些示例,在这些示例中,人们将使用而不是使用describe
回调中定义的变量来将字段设置为this
。哦,这可行,但IMO却很脆弱。一个简单的例子:如果您设置this.timeout
记录一些仅对您的测试有意义的数字,那么您已经覆盖了Mocha提供的用于更改其超时的功能。您可以使用其他名称,该名称现在不会冲突,但是会在发布新版本的Mocha时发生冲突。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句