run / waitsForブロックに頼らずに、このテストに合格するにはどうすればよいですか?
it("cannot change timeout", function(done) {
request("http://localhost:3000/hello", function(error, response, body){
expect(body).toEqual("hello world");
done();
});
});
回答:
Jasmineのドキュメントに従って、(現在)仕様に直接設定できます。
describe("long asynchronous specs", function() {
var originalTimeout;
beforeEach(function() {
originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
});
it("takes a long time", function(done) {
setTimeout(function() {
done();
}, 9000);
});
afterEach(function() {
jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
});
});
it
。あなたがテストに参加している時までに、開始される前done
にあったものDEFAULT_TIMEOUT_INTERVAL
にすでに夢中になっているようit
です。
この機能のプルリクエストを送信しました(https://github.com/mhevery/jasmine-node/pull/142)
it("cannot change timeout", function(done) {
request("http://localhost:3000/hello", function(error, response, body){
expect(body).toEqual("hello world");
done();
});
}, 5000); // set timeout to 5 seconds
グローバルなJasmine-Nodeタイムアウトを設定するには、次のようにします。
jasmine.getEnv().defaultTimeoutInterval = timeoutYouWouldPrefer;// e.g. 15000 milliseconds
jasmine.DEFAULT_TIMEOUT_INTERVALを設定することによって行われたと主張するREADMEドキュメントの誤った情報にもかかわらず、デバッグを介して.getEnv()部分を理解した開発者のGabeHicksの功績です。
1つのit()に対してのみカスタムタイムアウトを設定する場合は、タイムアウト(ミリ秒)を3番目の引数(文字列ステートメントと関数の後)として渡してみてください。ここで行われている例がありますが、カスタムタイムアウトがJasmineのデフォルトよりも長い場合はどうなるかわかりません。失敗すると思います。
jasmine.DEFAULT_TIMEOUT_INTERVAL = 12000;
すべてのテストに使用するグローバル構成ファイルを追加したところ、期待どおりに機能します。
describe
ステートメントの後に置きます:
describe("A saves to DB", function() {
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
スパイしてみませんか setTimeout()
か?
何かのようなもの:
var spy = spyOn(window, 'setTimeout').andCallFake(function (func, timeout) {
expect(timeout).toEqual(2500);
func();
});
setTimeOut(function () { ... }, 2500);
expect(spy).toHaveBeenCalled();
私の場合、複数のテストケースがあり、前述のソリューションを使用している間、次のものを使用していました。
beforeEach(function() {
originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
});
DEFAULT_TIMEOUT_INTERVALは最初のテストケースで更新されなかったので、これを追加する必要がありました。
beforeAll(() => {
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
})
すべてのテストを正常に実行するために私のコードに。
次のファイルでj $ .DEFAULT_TIMEOUT_INTERVALを10000に変更します:npm \ node_modules \ jasmine-core \ lib \ jasmine-core
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
値を変更することで、Jasmine + Jestを使用してゼロから構築されたまったく新しいセットアップでうまくいきました。期待どおりに動作します。