私はテスト目的のために私のアプリケーションでいくつかのHTTPトラフィックを傍受/模擬するためにnockを使用しようとしています。私たちのアプリは、私たちのサイトの別のサイトに認証して、HTTP 200(JSONデータ)とHTTP 401(データなし)を模倣してノックする必要があります。 。NockとMochaを一緒にうまく動かすにはどうすればいいですか?
私は2つのテストを単独で実行すると正しく動作しますが、テストスイート全体を実行するとそのうちの1つは常に失敗します。ノックは、node.js自体がネットワークトラフィックをどのように処理するのかを変更し、それが競合状態の原因であると仮定しているため、ノックが共有状態になっていることに気付きました。しかし、同じリクエストに対して2つの異なるノックインターセプタを使用した唯一の人2つの異なるテスト、私は何かが不足していることを知っている。
誰も私がなぜこれらのテストが互いに踏み込んでいるのか理解できませんか?
私の質問はHow to retest same URL using Mocha and Nock?に関連していますが、私はそこに示唆されたことをしたし、彼らは助けなかった。
(、再び、両者が個別に呼び出されますが、同じテストパスの一部として実行したときに失敗した場合は正常に動作)私のテストファイルは次のようになります。
import { expect } from 'chai';
import nock from 'nock';
import * as actionTypes from '../../src/constants/action-types';
import * as panoptes from '../../src/services/panoptes';
import { user } from '../modules/users/test-data';
const stagingHost = 'https://my-staging-server.org';
describe('Panoptes',() => {
afterEach(function (done) {
nock.cleanAll();
nock.disableNetConnect();
done();
});
beforeEach(function (done) {
nock.cleanAll();
nock.disableNetConnect();
done();
});
describe('with a valid user', function (done) {
let lastAction = null;
const scope = nock(stagingHost)
.get(/^\/oauth\/authorize/)
.reply(302, '', {
'location': 'https://localhost:3000',
'Strict-Transport-Security': 'max-age=31536000; includeSubDomains',
'X-Frame-Options': 'SAMEORIGIN',
'X-XSS-Protection': '1; mode=block',
});
scope
.get(/^\/api\/me/)
.reply(200, {
users: [user],
});
panoptes.checkLoginUser((action) => { lastAction = action; }).then(() => {
nock.removeInterceptor(scope);
done();
});
it('should know when somebody is logged in', function() {
expect(lastAction).to.not.be.null;
expect(lastAction.type).to.equal(actionTypes.SET_LOGIN_USER);
expect(lastAction.user).to.not.be.null;
expect(lastAction.user.id).to.equal(user.id);
expect(lastAction.user.login).to.equal(user.login);
});
});
});
と
import { expect } from 'chai';
import nock from 'nock';
import * as actionTypes from '../../src/constants/action-types';
import * as panoptes from '../../src/services/panoptes';
const stagingHost = 'https://my-staging-server.org';
describe('Panoptes',() => {
afterEach(function (done) {
nock.cleanAll();
nock.disableNetConnect();
done();
});
beforeEach(function (done) {
nock.cleanAll();
nock.disableNetConnect();
done();
});
describe('with no user', function (done) {
let lastAction = null;
const scope = nock(stagingHost)
.get(/^\/oauth\/authorize/)
.reply(302, '', {
'Cache-Control': 'no-cache',
'location': 'https://my-staging-server.org/users/sign_in',
'Strict-Transport-Security': 'max-age=31536000; includeSubDomains',
'X-Frame-Options': 'SAMEORIGIN',
'X-XSS-Protection': '1; mode=block',
});
scope
.get(/^\/api\/me/)
.reply(401);
panoptes.checkLoginUser((action) => { lastAction = action; }).then(() => {
nock.removeInterceptor(scope);
done();
});
it('should know that nobody is logged in', function() {
expect(lastAction).to.not.be.null;
expect(lastAction.type).to.equal(actionTypes.SET_LOGIN_USER);
expect(lastAction.user).to.be.null;
});
});
});
両方のテストを一緒に実行すると、どのようなエラーが表示されますか? –
私はエラーは発生しませんが、実際には2番目のテストが失敗したときに失敗しただけです。 2回目のテストは、最初のテストの模擬試験の影響を受けているようです。 –