3

chai-as-promised ドキュメントには、同じテストで複数の promise を処理する次の例があります。

it("should all be well", function (done) {
    Q.all([
        promiseA.should.become("happy"),
        promiseB.should.eventually.have.property("fun times"),
        promiseC.should.be.rejectedWith(TypeError, "only joyful types are allowed")
    ]).should.notify(done);
});

Qhere は と から来ているnpm install qと思いvar Q = require('q');ます。

どこ.shouldから来たの?

私がこれを試してみると、shouldundefined得られTypeError: Cannot call method 'notify' of undefinedます。

最初に行われるはずのモンキーパッチはありQますか? または、何かの間違ったバージョンを使用していますか?

きゅうりを分度器で使っています。私が理解しているように、彼らはまだ約束を返すことをサポートしていないので、ユーザーはへの呼び出しを処理する必要がありますdone

4

2 に答える 2

3

私自身の質問に答える:

.should"should" アサーション スタイル - http://chaijs.com/guide/styles/#shouldから来ています。次を実行する必要があります。

chai.should();

前後: var Q = require('q');_Q.all([]).should.notify...

var Q = require('q');
var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');

// ***************
chai.should();
// ***************

chai.use(chaiAsPromised);

it("should all be well", function (done) {
    Q.all([
        promiseA.should.become("happy"),
        promiseB.should.eventually.have.property("fun times"),
        promiseC.should.be.rejectedWith(TypeError, "only joyful types are allowed")
    ]).should.notify(done);
});

ドキュメントに従って:

これにより、個々の promise アサーションの失敗がテスト フレームワークに渡されます。

于 2015-03-04T13:16:29.833 に答える
0

私が正しく理解していれば、Q-約束はすべきではありません。これを試すことをお勧めします

it("should all be well", function (done) {
    Q.all([
        promiseA.should.become("happy"),
        promiseB.should.eventually.have.property("fun times"),
        promiseC.should.be.rejectedWith(TypeError, "only joyful types are allowed")
    ]).then(done);
});

次のようにrequire を使用することもできますmocha-as-promised

require("mocha-as-promised")();

it("should all be well", function (done) {
    return Q.all([
            promiseA.then(function(someData){
                //here standart chai validation;
            }),
            promiseB.then(function(someData){
                //here standart chai validation;
            });
    ]).then(done);
});

OK、コードに次の行を追加しますか?

var chai = require("chai");
var chaiAsPromised = require("chai-as-promised");

chai.use(chaiAsPromised);
于 2015-03-04T13:07:09.183 に答える