質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

3470閲覧

【Django】urlsテスト:fixture 'self' not foundエラー

a0002

総合スコア7

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/07/27 05:58

編集2020/07/28 13:22

前提・実現したいこと

Djangoでpytest(Pythonのテストフレームワーク)を使ってテストコードを作成しており
テスト対象コード(①find.pyと②urls.py)に対するテストコード(③test_urls_class_NG.py)を作成し
テストすると以下のようなエラーが発生しました。

①find.pyの★①と★③を 
③test_urls_class_NG.pyの★④ でインスタンス生成し引数を引き継がせて書いたつもりですが
この書き方は合っていますでしょうか?

また、もしこれ以外に原因などございましたらお教え願えないでしょうか?

発生している問題・エラーメッセージ

(trouble1) C:\Users\gdans\Desktop\trouble8_apptest\trouble8\tests>pytest test_urls_class_NG.py -v _________________________________________________________________________________________ ERROR at setup of test_url_find _________________________________________________________________________________________ file C:\Users\gdans\Desktop\trouble8_apptest\trouble8\tests\test_urls_class_NG.py, line 11 def test_url_find(self, request): E fixture 'self' not found > available fixtures: _dj_autoclear_mailbox, _django_clear_site_cache, _django_db_marker, _django_set_urlconf, _django_setup_unittest, _fail_for_invalid_template_variable, _live_server_helper, _template_string_if_invalid_marker, admin_client, admin_user, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, client, db, django_assert_max_num_queries, django_assert_num_queries, django_db_blocker, django_db_createdb, django_db_keepdb, django_db_modify_db_settings, django_db_modify_db_settings_parallel_suffix, django_db_modify_db_settings_tox_suffix, django_db_modify_db_settings_xdist_suffix, django_db_reset_sequences, django_db_setup, django_db_use_migrations, django_mail_dnsname, django_mail_patch_dns, django_test_environment, django_user_model, django_username_field, doctest_namespace, live_server, mailoutbox, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, rf, settings, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, transactional_db > use 'pytest --fixtures [testpath]' for help on them. C:\Users\gdans\Desktop\trouble8_apptest\trouble8\tests\test_urls_class_NG.py:11

該当のソースコード

◆①テスト対象コード:find.py

from django.shortcuts import render from django.views.generic import TemplateView **class FindResultView(TemplateView): ★① def __init__(self):  ★②** title = 'title test' self.params ={ 'title':title, } ** def get(request, self): ★③** return render(request, 'find.html', self.params)

◆②テスト対象コード:urls.py

from django.urls import path from .find import FindResultView # find.py urlpatterns = [ path('find', FindResultView.as_view(), name='find'), ]

◆③テストコード:test_urls_class.py  

import os os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'trouble8_app.settings') import django django.setup() from django.urls import resolve from trouble8.find import FindResultView **def test_url_find(self, request):  ★④ f = FindResultView(self, request) ★④** found = resolve('/trouble8/find') assert found.func == f

試したこと

エラーに「fixture 'self' not found」と書かれているので
クラス定義(①find.pyの★①、★②、★③)に対する 継承方法(③test_urls_class_NG.pyの★④)
の書き方でエラーが出ている可能性を疑い

f = FindResultView(self, request) ★④ の部分を
f = FindResultView() や f = FindResultView.get(self, request) に書き換えて実行したのですが同様のエラーが発生し改善できませんでした。

補足情報(FW/ツールのバージョンなど)

Python 3
anaconda3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mtb_beta

2021/03/21 04:53

こちらの質問は解消しているかと思いますので、ベストアンサー選択して、閉じていただければと思います
guest

回答1

0

「この書き方は合っていますでしょうか? 」という質問に対する回答としては、「あってません」です。

とりあえず、「pytestのfixtureとは何か」が理解できていないように見受けるので、先にpytestのfixtureについて調べてみると良いかと思います。

また、pytestでdjangoのviewをテストする方法は、「pytest django view」などで調べてみると参考になりそうな記事が出てくるので、合わせてそちらも参照すると良いかと思います。

投稿2020/07/28 17:11

mtb_beta

総合スコア181

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

a0002

2020/07/29 01:04

ご連絡をありがとうございます。 投稿したテストコードはpytestでdjangoのurlsをテストするコードですが とりあえず、pytestのfixtureについて確認してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問